/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"92517276-DC36-4443-8498-5F7279B3A9BE",variableType:4}
 */
var zparam_usa_proyecto = 0;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"2D522B8E-C48F-4D77-9723-3EDE831D4AF5",variableType:4}
 */
var zconf_fact_electronica = 10;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"B521AC98-D788-4830-969F-8F2B4AB04725",variableType:4}
 */
var zconf_numeracion_recibo = 4;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"ECA2E6EE-745D-459F-8073-A2B2A14743C4",variableType:4}
 */
var zparam_caja_default = 1;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"3EEB1D5D-2649-4109-AA98-AFD83101AF77",variableType:4}
 */
var zconf_numeracion_retencion_iibb = 83;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"2A8CE03E-9764-4108-96A4-B9788FC4FD37",variableType:4}
 */
var zconf_numeracion_retencion_iva = 81;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"2CF7F5B2-480F-4652-8DC8-2638B901F7A5",variableType:4}
 */
var zconf_numeracion_retencion_ganancias = 82;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"96E1E26E-91E8-4E32-BE53-03C3D959211B",variableType:4}
 */
var zparam_facturacion_tipo_remito = 0;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"513E3873-B3A8-4F17-A611-132EB058DC1C",variableType:4}
 */
var zconf_numeracion_remito_packing = 16;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"668D41E9-543A-4BEC-9009-0017EA34D99A",variableType:4}
 */
var zparam_fact_concepto = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"0A1A1537-7B01-4D94-BB48-CED8A5A4F436",variableType:8}
 */
var zparam_tolerancia_cambio_cantidad = 0;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"D0720D12-7FD5-41ED-A930-C741CAE00117",variableType:4}
 */
var zconf_rem_anulado = 5;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"9741F8CC-41C7-40A0-8DAC-C01A0F362A97",variableType:4}
 */
var zconf_rem_cerrado = 4;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"40299811-7612-4211-95CF-7C8B208504CF",variableType:4}
 */
var zconf_rem_desde_factura = 3;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"B87BB719-0E3F-4B85-A3D4-EB1375963989",variableType:4}
 */
var zconf_rem_facturado = 2;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"765C0BAA-4FF7-44CF-8257-2A4122B2EE9D",variableType:4}
 */
var zconf_ped_anulado = 5;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"BB4FAB9A-BC32-4450-A0C5-5DEEB6BA756D",variableType:4}
 */
var zconf_ped_cerrado = 4;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"3D0343A3-7D61-4331-9950-64BA1BEC96C8",variableType:4}
 */
var zconf_ped_facturado = 3;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"858CCA7E-306A-4F4D-8B69-BDCBBC3916A9",variableType:4}
 */
var zconf_presup_rechazado = 3;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"3E231832-4391-43CE-ACA0-FEA9D2B687AF",variableType:4}
 */
var zconf_presup_aceptado = 2;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"6275593B-E579-4491-B13B-970D441E525C",variableType:4}
 */
var zparam_flete_iva_porc = 21;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"5B7D79AC-2E4E-4A54-B373-912457FE5F6B",variableType:4}
 */
var zparam_fact_nro_manual = 0;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"88E18E81-0D24-4024-A81A-37F2AF7023C5",variableType:8}
 */
var zparam_opago_tolerancia = 2;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"5FEA34CA-2119-411B-8210-05851B2CBF81",variableType:4}
 */
var zconf_reg_ret_ib_default = 209;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"203241E9-3751-41D2-9728-E7BA499CA5D7",variableType:8}
 */
var gtotal_comprob_compras = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"5D3C7437-7BD5-4DB1-B8B5-08BC2C5EDB04",variableType:8}
 */
var gtotal_neto_retencion = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"935CC5C0-C055-4DC9-9109-1D5F5ADD1551",variableType:8}
 */
var greten_ib = null;

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"8F6299B5-A283-4962-A162-FB7D10F19AC6"}
 */
var gHoy = utils.dateFormat(application.getServerTimeStamp(),'dd-MM-yyyy');

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"D93B1B6D-ED2F-433A-B65D-C5979DB99B89",variableType:4}
 */
var zconf_chq_devol_prov = 10;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"A197D79C-FF11-409D-9C5F-D6BD20CDFF59",variableType:4}
 */
var zconf_cyb_imputacion_devol_pago_prov = 2;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"444BB316-8EAB-4207-BDEC-52E572D8CAFA",variableType:4}
 */
var zparam_codigo_opago_devol = 17;

/**
 * @type {Date}
 *
 * @properties={typeid:35,uuid:"266D004B-FBA6-4795-9BB2-B131F245C96C",variableType:93}
 */
var gretencion_fechahasta = null;

/**
 * @type {Date}
 *
 * @properties={typeid:35,uuid:"7644E7CE-DF87-4A27-A95F-8B1F075FF75F",variableType:93}
 */
var gretencion_fechadesde = null;

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"6ED27536-2B59-4E81-80B3-AB6F802C2785"}
 */
var gCharNull = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"7DBB67E5-1E23-4E88-850F-CEE054955AA0",variableType:8}
 */
var gtotal_referencia = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"F8EBCC47-AB9B-45BF-9417-80CEBEF4B751",variableType:4}
 */
var zconf_numeracion_opago_varios_negat = 51;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"190B692D-4CFA-4DC9-B59C-0E7C29E1E7AA",variableType:4}
 */
var zconf_numeracion_ing_varios_negat = 52;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"46DCB9AA-45B8-4E01-9EC2-3682298F6CF0",variableType:4}
 */
var zconf_chq_rechazado_varios = 9;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"748F7590-7AD3-4C1B-BC02-F37871437144",variableType:4}
 */
var zparam_codigo_opago_varios_negat = 7;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"C2745644-D174-4876-B4FF-B757657EEA8B",variableType:4}
 */
var zparam_codigo_opago_varios = 6;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"55679A60-A35E-41BD-AB78-EA177DB7237D",variableType:4}
 */
var zconf_rec_cod_mov_recibo = 1;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"D952ACB1-41C4-4FA5-8FDE-3D0A89ECE91E",variableType:4}
 */
var zconf_rec_cod_mov_ing_varios_neg = 3;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"FD9AE619-71E3-4A47-B4F0-71FA70BFB522",variableType:4}
 */
var zconf_rec_cod_mov_ing_varios = 2;

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"ECDADC21-F13C-4670-97F1-6D5E76C64884"}
 */
var zparam_mail_resumen_saldo_msj = null;

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"E6DDA431-7C04-4C5C-99FC-30D5EA675075"}
 */
var zparam_mail_resumen_cta_msj = null;

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"E0527022-999B-4F5A-A51A-A1513CB1651C"}
 */
var zparam_mail_resumen_saldo_asunto = 'Resumen Saldo';

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"214A1DB8-C327-47BC-8FC1-04795A0661B4"}
 */
var zparam_mail_resumen_cta_asunto = 'Resumen Cuenta';

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"D7B74ED7-3081-4388-9367-EB6192BBB707"}
 */
var zparam_contable_nodo_fleteros = '2.1.1.2';

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"39E7D3BE-48F7-4351-8160-F13FCA0A6DED"}
 */
var gCuenta_id_alta = null;

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"05454836-D366-417E-A6AD-7A47D583654E"}
 */
var zparam_contable_nodo_proveedores = '2.1.1.1';

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"280F3398-F685-4192-A00D-743715803830"}
 */
var zparam_contable_nodo_cliente = '1.1.4.1';

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"7AF5D7BC-E5AD-4283-8CA0-77D602797A7D",variableType:4}
 */
var zconf_hist_ingre_interno = 3;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"10577031-3318-4A95-8C40-55690A2B0A48",variableType:4}
 */
var zconf_hist_egre_interno = 4;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"0CC7E6C0-7918-4D7F-8058-D8D9E3A329D9",variableType:4}
 */
var zconf_numeracion_remito_int = 15;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"1504366D-C742-4645-8239-2193927785B1",variableType:8}
 */
var vta_cli_ult_mes = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"DD6FBE45-C7D8-4230-9F9F-9E1F3F5D198D",variableType:8}
 */
var vta_cli_prom = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"51D52B61-ACD9-4B2F-97BB-7A424D1E9BCA",variableType:4}
 */
var greten_porc_iva_detraer = 21;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"A916F806-2DDD-4ED1-A113-57CE0D3D26F5",variableType:4}
 */
var zconf_tipo_iva_exportacion = 5;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"C16C0381-C55F-48AE-B39B-FD8F2DCDD783",variableType:4}
 */
var zconf_tipo_iva_tipo_M = 7;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"E2DCB892-9E42-4139-94D7-C97205847627",variableType:8}
 */
var greten_iva_imponible = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"B7AAF463-30BC-4A81-A35E-029E4F8875B7",variableType:4}
 */
var cuantos_cheques = 0;

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"37274B23-DCE8-4B80-8868-93C1E27EB2A2"}
 */
var gCharConcat = null;

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"FD98CFE7-8015-4CC9-9670-9270065D752D"}
 */
var gcheque_nro = null;

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"0E8B525E-BE2A-493F-8549-7DB0E9459CC7"}
 */
var gCod_producto = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"29552231-6981-42A4-8BE9-6ABEACF5B102",variableType:8}
 */
var gcoef_aceleracion_compra = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"A995CA6C-44E5-4B81-A5B4-65D334B89FDD",variableType:4}
 */
var gcuentas_variable = null;

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"04E16DA8-51F2-488F-B556-205BFCF2A204"}
 */
var gcumplimiento = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"DB213CB1-7C5D-4449-8C91-22B13CDF2F60",variableType:4}
 */
var gdeposito = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"05D81685-9FA6-4A89-9A9A-C4997F8C11AA",variableType:8}
 */
var gdiferencia = 0;

/**
 * @type {Date}
 *
 * @properties={typeid:35,uuid:"4A33B414-87A2-407A-ACC4-9BA65303B296",variableType:93}
 */
var gfact_mas_antigua_adeudada = null;

/**
 * @type {Date}
 *
 * @properties={typeid:35,uuid:"156B54FA-6233-482A-9080-558BCFD8EF67",variableType:93}
 */
var gFecha_Extracto = null;

/**
 * @type {Date}
 *
 * @properties={typeid:35,uuid:"B2E1FCF4-E9DC-4DF1-85AF-FC31C4DB3C6B",variableType:93}
 */
var gFechaAux = null;

/**
 * @type {Date}
 *
 * @properties={typeid:35,uuid:"E842F13B-F23E-4312-AE16-5289CDBAF690",variableType:93}
 */
var gFechaDesde = null;

/**
 * @type {Date}
 *
 * @properties={typeid:35,uuid:"24ACD452-E104-4719-A9DB-AB43B4832D5F",variableType:93}
 */
var gFechaDesde_resumen = new Date();

/**
 * @type {Date}
 *
 * @properties={typeid:35,uuid:"3DC74D98-B1FF-4BC6-8799-0CCB56CC5D33",variableType:93}
 */
var gFechaHasta = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"7D29988A-ABC5-4679-B09B-DBB3DCCB9697",variableType:4}
 */
var gfilas = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"47B13C25-4E1E-416A-B74E-91D4B977F523",variableType:4}
 */
var ghoja_desde_diario = null;

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"7359D677-1CC5-4337-9A2E-4583FAD2E588"}
 */
var gletra_aux = null;

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"7CF66DE1-B791-4D7F-BEB4-92AA5A6C73B4"}
 */
var gmaderas_id = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"EE44F9B4-ADF8-4548-990C-5252059AD961",variableType:4}
 */
var gmoneda = 1;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"BD1EBD49-CA4C-4D69-8FD6-C8E376F8E727",variableType:4}
 */
var gnro_factura_aux = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"9CE7B99E-7766-49AE-83E8-4F0494EA9CBF",variableType:4}
 */
var gnumeral_recibo_vtas_1 = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"7F544206-BA7F-45F6-BBB6-0E9779032AE7",variableType:4}
 */
var gnumeral_recibo_vtas_2 = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"860296ED-AB70-499C-8F7E-BBEFA8B0D849",variableType:4}
 */
var gnumeral_recibo_vtas_3 = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"3D6813AC-0FC4-4E56-9607-8B7E80D013D3",variableType:4}
 */
var gPedido = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"B9FC9309-9477-45F4-804D-15F4F8F4AFB0",variableType:8}
 */
var gpedidos_no_remitidos = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"D5D1E5C9-395D-47D8-8ACA-1D1B5F9DC464",variableType:4}
 */
var gproducto = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"E0513A78-0C60-498D-8ACE-7D4CF61D329B",variableType:4}
 */
var gproveedor_o_fletero = 0;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"E03CCA7D-3A6B-445F-8046-47BBFB649256",variableType:4}
 */
var gProveedorDesde = null;

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"790D1E1F-FB0D-40E3-B280-41656BBE32E6"}
 */
var gProveedorDesdeNombre = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"B98C5A7A-AF9D-4280-B550-092104C3A17D",variableType:4}
 */
var gProveedorHasta = null;

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"861BF38E-0411-4E7A-BF62-66D342A208CA"}
 */
var gProveedorHastaNombre = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"258C8460-0562-4629-B179-062EC7DC16C3",variableType:4}
 */
var gProveedorReten = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"662A2306-C4EF-44E3-9956-1A6174F76039",variableType:4}
 */
var gredondeo_constante = 0;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"7885D74D-DAC0-4C85-9889-6D09AE454552",variableType:8}
 */
var gremitos_no_fact = null;

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"7027E86F-ECA1-43EB-B0F8-4C1196A4F1BA"}
 */
var gresu_titu_1 = null;

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"B4631B51-A1F9-4A0D-A95B-926A7E115AA8"}
 */
var gresu_titu_2 = null;

/**
 * @type {Array}
 *
 * @properties={typeid:35,uuid:"911014F2-9041-4BD0-B6D5-DACCBA72CA70",variableType:-4}
 */
var greten = new Array();

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"50D04EE6-29AD-44E8-82D1-6CA43CF1F6FA",variableType:8}
 */
var greten_ganan = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"6D3CE247-0740-49DC-8563-3267509A6C7F",variableType:8}
 */
var greten_iva = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"83FBD5B8-8D41-40BE-AB5A-A84A1DD63065",variableType:4}
 */
var gRetencionesGanancias = 2;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"D511E746-EF72-4D14-8346-037912E4B4BB",variableType:4}
 */
var gRetencionesIva = 1;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"141EC639-87C8-40FF-9D47-986E2365C408",variableType:4}
 */
var gRetencionesIB = 3;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"BA3A15B9-2A77-4364-A885-550C3B1ACD88",variableType:8}
 */
var gsaldo_aux = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"C291235A-391A-45E8-BA2A-60ACD57C0C6F",variableType:8}
 */
var gsaldo_chq_propios = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"4C914018-09B0-4F61-9251-428247B083CA",variableType:8}
 */
var gsaldo_chq_terceros = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"0BAFC3D7-2E4B-4634-B2EA-FEA1083CE14E",variableType:8}
 */
var gsaldo_final_efec = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"44B2886E-2C0B-4A5F-A8E9-CBF6B836049B",variableType:8}
 */
var gsaldo_final_total = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"0630B3AB-7A3A-45DB-A769-C660A9731A64",variableType:8}
 */
var gsaldo_final_valor = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"EC630EDB-66B2-4221-A848-A8F13D260BBF",variableType:8}
 */
var gsaldo_inicial_efec = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"9FF4E648-3F3F-4AD9-BD82-8AD329F2D96E",variableType:8}
 */
var gsaldo_inicial_valor = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"F38AA913-4525-4915-AE2C-07891AABCB1B",variableType:8}
 */
var gsaldo_m1 = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"8990D22C-340C-4BB8-B240-18CDFDBC605D",variableType:8}
 */
var gsaldo_m4 = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"670B481F-54C3-4FF8-BBB3-F384C91DA656",variableType:8}
 */
var gsaldo_resumen_aux = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"38DB8DF1-71CB-403F-8693-99741EABA006",variableType:4}
 */
var gSucursal = 1;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"C5E0F177-F5D1-4C9C-9A05-CD945E47487F",variableType:4}
 */
var gsucursal_aux = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"22665670-2EB1-43F2-9D9D-C391301B384D",variableType:4}
 */
var gTipo_iva_usuario = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"2B68C33A-94E5-48D3-98EE-48DD037ECCB5",variableType:8}
 */
var gtotal_anticipo = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"13836400-704F-4CA4-8216-59EB117C5444",variableType:8}
 */
var gtotal_cheques = 0;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"6E88236D-2E80-470E-AF6A-999627C71C1C",variableType:8}
 */
var gtotal_comprob = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"7BD3B5AD-A563-41EE-A416-43213ED9C9FF",variableType:8}
 */
var gtotal_creditos = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"ECA1BE74-8A65-4467-86E9-355F44BDDF2B",variableType:8}
 */
var gtotal_debitos = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"5E512DF2-D6FD-4DF5-A960-7A71DE9E9D18",variableType:8}
 */
var gtotal_retenciones = 0;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"507565B5-262C-48CF-BCBA-5801B965A2A7",variableType:8}
 */
var gtotal_riesgo = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"D4B424A4-1180-443E-8C8B-C5F0D31C1BE6",variableType:8}
 */
var gtotal_saldo = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"0688B7E5-2AB2-4572-A28A-03986A4C53B1",variableType:8}
 */
var gtotal_valores = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"285928FB-3A46-4800-B13C-6D569D6F78EC",variableType:8}
 */
var gtotal_varios = 0;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"A8A4C7B8-FA94-4F84-B4E7-03D5979FCDF1",variableType:4}
 */
var gvalor_cero = 0;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"4EF07AB6-8411-4FF3-AECF-06197E6CC0FF",variableType:4}
 */
var gvalor_dos2 = 2;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"B7D6DFEA-C199-4B17-BD47-96364F1CBFDF",variableType:4}
 */
var gvalor_uno = 1;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"895DD21E-0995-4135-A57F-A89F0BC4F9F0",variableType:4}
 */
var gvalor_variable = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"0BF6FFA9-2021-4FBC-A432-EEB7803EDFEB",variableType:4}
 */
var gValorTres = 3;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"484D57FB-56F2-4302-B51B-513B087D553D",variableType:4}
 */
var gvendedor = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"5F66DE52-3D72-4CC7-88FD-85543F026D03",variableType:4}
 */
var k_cajas = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"FC2658B0-0B04-4199-B685-36B810D56FFE",variableType:4}
 */
var zconf_cambio_prec_estado_actualizado = 3;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"27F46029-D1FC-40F6-83D5-F838074DB41B",variableType:4}
 */
var zconf_cambio_prec_estado_aprobado = 2;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"B28051EF-E2D6-4CD6-BDE6-1F73A9750A39",variableType:4}
 */
var zconf_cambio_prec_estado_ingresado = 1;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"4FE569D8-20D3-45D9-8CE5-4CE7E843BC48",variableType:4}
 */
var zconf_cambio_prec_tipo_articulo = 3;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"E284F877-296B-47C0-937B-68A5A6AA3F92",variableType:4}
 */
var zconf_cambio_prec_tipo_cotizacion = 4;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"DF45D5A3-0D3E-4EFA-8E1F-D9111540FEEC",variableType:4}
 */
var zconf_cambio_prec_tipo_flete = 6;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"33A58E49-1ABD-4154-B861-C2025B8EBFD2",variableType:4}
 */
var zconf_cambio_prec_tipo_madera = 1;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"A26430C2-6FF7-4F0E-916C-E7A4274A2484",variableType:4}
 */
var zconf_cambio_prec_tipo_margen = 2;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"BE2AC0EC-4BA2-4B32-922C-16C3421D0E1D",variableType:4}
 */
var zconf_cambio_prec_tipo_rubro = 5;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"5C9E884C-C0AE-43E5-8823-CF2C10283F63",variableType:4}
 */
var zconf_chq_canjeado = 8;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"81D34D59-1B37-43B0-888B-83146EE915EE",variableType:4}
 */
var zconf_chq_conciliado = 6;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"93DD3004-CC88-4DBB-9EAA-1E6E817C7C04",variableType:4}
 */
var zconf_chq_depositado = 3;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"25D3F696-A3A1-4991-89DE-8A3E362A7026",variableType:4}
 */
var zconf_chq_emitido = 5;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"6858CDFC-C2F1-469B-A51C-E20E2EF49A71",variableType:4}
 */
var zconf_chq_en_caja = 1;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"7B3D25BD-2600-4227-A130-8C12D3553C4E",variableType:4}
 */
var zconf_chq_entregado_pago = 2;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"45CDF6A8-E548-410E-BA78-228FFDEE052E",variableType:4}
 */
var zconf_chq_rechazado = 4;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"24875D18-D2EC-466B-81F5-1D418B80DBAD",variableType:4}
 */
var zconf_chq_rechazado_propio = 7;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"3E10237C-5696-4C97-A24C-C480FAFD28D8",variableType:4}
 */
var zconf_cyb_cod_movim_egreso = 2;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"DBA383A7-535B-4D10-AAEC-CF7821414832",variableType:4}
 */
var zconf_cyb_cod_movim_ingreso = 1;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"49109177-61AC-49C1-857A-C290BA19C07D",variableType:4}
 */
var zconf_cyb_imputacion_canje_cheques = 20;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"6CC1F290-2CFD-4B49-8E4F-85BDD48DEB03",variableType:4}
 */
var zconf_cyb_imputacion_cheque_rechazado = 13;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"D62C79A9-6FAE-43A5-B0FF-CBF6F90DF35C",variableType:4}
 */
var zconf_cyb_imputacion_cobranza = 1;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"39DF9366-DCAD-45A8-AE3B-E190615D4B2D",variableType:4}
 */
var zconf_cyb_imputacion_deposito = 4;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"FF2B6102-83AF-4C7B-B58A-443DAA5C5C2F",variableType:4}
 */
var zconf_cyb_imputacion_egresos_varios = 9;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"04BE7CBB-9A29-4D15-B4B9-1AF8655553A8",variableType:4}
 */
var zconf_cyb_imputacion_extraccion = 3;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"3AAEAC48-7127-419B-A0F8-705C68989655",variableType:4}
 */
var zconf_cyb_imputacion_ingresos_varios = 8;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"0670AB19-84A3-4882-ABBE-B349879D577C",variableType:4}
 */
var zconf_cyb_imputacion_pago_proveed = 2;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"BA204FB0-4AF3-4D8E-9093-6E14F245453E",variableType:4}
 */
var zconf_cyb_imputacion_transferencia_a_banco = 11;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"E64F7265-495D-489D-AD5E-0E2EBAF96350",variableType:4}
 */
var zconf_cyb_imputacion_transferencia_a_caja = 6;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"F2A06986-F064-4024-BD37-85B42C30FCFD",variableType:4}
 */
var zconf_cyb_imputacion_transferencia_desde_banco = 12;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"3E798AE6-8231-4403-9A02-BF5ED31EE11E",variableType:4}
 */
var zconf_cyb_imputacion_transferencia_desde_caja = 7;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"DA5F59DA-E567-4CDE-8CB1-91747E5D7D67",variableType:4}
 */
var zconf_cyb_imputacion_valor_a_depositar = 5;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"F827C387-C0BE-4680-B299-D2B01C9C497C",variableType:4}
 */
var zconf_fact_ingresada = 1;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"6601AC1D-A130-490A-A153-C83F4D2983E4",variableType:4}
 */
var zconf_hist_egre_cliente = 2;

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"36BE3C19-0A33-4370-8DA8-90811DEC32E4"}
 */
var zconf_letra_pedido = "X";

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"16B42A4B-49FC-44AF-9CEE-7F6AAB7CCC72"}
 */
var zconf_letra_presupuesto = "X";

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"212217C3-6635-4A9F-B396-CE7C3090FEEB"}
 */
var zconf_letra_recibo = "X";

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"5A739023-CD68-46F0-A34E-7A082C99D675"}
 */
var zconf_letra_remito = "R";

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"6C5B39E3-16D0-4E32-B62B-89425533C952",variableType:4}
 */
var zconf_numeracion_fc_a = 1;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"B49F6CE4-81BF-427B-B72E-3279E94A9BD7",variableType:4}
 */
var zconf_numeracion_fc_b = 6;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"FF7CE098-4A44-4FE8-96F1-25615CB3D3F9",variableType:4}
 */
var zconf_numeracion_nc_a = 3;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"7C0FB6C4-72B6-47AA-A1FD-D4D233B85D96",variableType:4}
 */
var zconf_numeracion_nc_b = 8;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"944C24E0-C9D9-49E2-9549-B262FA6AEBED",variableType:4}
 */
var zconf_numeracion_nd_a = 2;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"E9D25164-322F-4031-8A21-20ACB3119010",variableType:4}
 */
var zconf_numeracion_nd_b = 7;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"C66DEAE2-46C4-4A47-9262-93F876308E8D",variableType:4}
 */
var zconf_numeracion_pedido = 13;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"49A4AD4B-642E-4346-9D4C-2CDA45D1E81C",variableType:4}
 */
var zconf_numeracion_presupuesto = 12;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"482BEECE-1E5C-4AEB-828B-4995A76BBB57",variableType:4}
 */
var zconf_numeracion_remito = 14;

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"DA63CB7D-3FEA-488D-83BB-D45D80B63F7B"}
 */
var zconf_path_pdf = 'C:/resumenes_pdf';

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"A0C09D16-2E3B-46C5-9C90-B2E73C0C305E",variableType:4}
 */
var zconf_ped_ingresado = 1;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"42121CFD-432A-421B-89DE-A020D7B0DF5D",variableType:4}
 */
var zconf_ped_remitido = 2;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"9C382370-8BF7-4382-BEA6-ECC86F07D9EB",variableType:4}
 */
var zconf_presup_ingresado = 1;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"09D35EC8-DB65-478D-BB71-E65D75BC260F",variableType:4}
 */
var zconf_rec_autorizado = 2;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"0D12CED5-9E12-4BA4-B292-2E38C80E8BBB",variableType:4}
 */
var zconf_rec_ingresado = 1;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"A24D2A26-7164-48F9-BCB9-55986DBE93F3",variableType:4}
 */
var zconf_rem_ingresado = 1;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"0D9EAA54-7EDF-4467-8204-5329497849EA",variableType:4}
 */
var zconf_tipo_iva_cons_final = 2;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"A5D848B3-80A4-4455-95F9-558A38D65F75",variableType:4}
 */
var zconf_tipo_iva_exento = 3;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"44368B5F-F8AD-4D3D-9EFE-A32656C2D8D9",variableType:4}
 */
var zconf_tipo_iva_inscripto = 1;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"61DF5DA7-B9A1-41CD-9DF3-43C8A704CBA6",variableType:4}
 */
var zconf_tipo_iva_monotributo = 4;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"9EF75D1A-914A-49E8-9CE1-0EC891317478",variableType:4}
 */
var zconf_tipo_iva_no_resp = 6;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"3FFD5687-90FA-4399-8AB1-9389C8F1657E",variableType:4}
 */
var zconf_tipo_mayorista = 1;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"B2B0D9DD-0C77-4383-84C2-6B6993F47507",variableType:4}
 */
var zconf_tipo_minorista = 2;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"9F210531-541C-475D-9F43-C8E1DDF86383",variableType:4}
 */
var zparam_codigo_ocompra = 61;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"A5ADA66D-BDD7-40AD-8F62-A171AF534F53",variableType:4}
 */
var zparam_codigo_opago = 4;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"C9343212-D051-4350-9DEB-C2D254A6CDD4",variableType:4}
 */
var zparam_codigo_paquetes = 501;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"91E146E9-6CD5-4BDD-8E02-B91F59DAC07B",variableType:4}
 */
var zparam_codigo_recepciones = 62;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"E7D1F1C9-68BB-48AE-AC93-ED01FC912933",variableType:4}
 */
var zparam_cond_iva_default = 1;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"897CA577-218A-4B58-9D4A-B6FC88671D36",variableType:4}
 */
var zparam_cond_pago_default = 11;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"2C36C57D-6C94-40CD-82D9-B68167CE851F",variableType:4}
 */
var zparam_deposito_default = 1;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"66684674-CE5C-460A-8CCD-39C11FB12784",variableType:8}
 */
var zparam_desc_permitido = 15.00;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"31C65945-833C-4616-9AA1-AFB9A07242C3",variableType:8}
 */
var zparam_flete_importe = 100.00;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"1EFCF226-9518-40EF-AA31-46AF4E76EAB0",variableType:8}
 */
var zparam_flete_porc = 7.0;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"37E09D06-B6D1-4B22-9358-E18CB6905541",variableType:8}
 */
var zparam_margen_calc_ult_fac = 20.00;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"22A22CA5-F1C9-47AC-975F-8A7FFC666677",variableType:4}
 */
var zparam_margen_dias_chq = 5;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"7F7E2DEB-51F5-4F66-9936-2D4BD300454E",variableType:8}
 */
var zparam_margen_remito_supera_pedido = 10.00;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"0CCD4C7B-824F-4E68-A2C2-BD888A15033B",variableType:4}
 */
var zparam_meses_prom_vta = 3;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"17F5A982-21DC-4B54-8372-0A1EF11B53CA",variableType:4}
 */
var zparam_moneda_default = 1;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"0A6A56AB-2F64-4966-8DD0-3EBD02F7A7FF",variableType:4}
 */
var zparam_presup_dias_validez = 30;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"3769FF7A-B416-4433-862E-156D50A66249",variableType:4}
 */
var zparam_tope_coef_acel = 2;

/**
 * Called when the valuelist needs data, it has 3 modes.
 * real and display params both null: return the whole list
 * only display is specified, called by a typeahead, return a filtered list
 * only real value is specified, called when the list doesnt contain the real value for the give record value, this will insert this value into the existing list
 *
 * @param {String} displayValue The value of a lookupfield that a user types
 * @param {Object} realValue The real value for a lookupfield where a display value should be get for
 * @param {JSRecord} record The current record for the valuelist.
 * @param {String} valueListName The valuelist name that triggers the method.
 *
 * @returns {JSDataSet} A dataset with 1 or 2 columns display[,real]
 *
 * @properties={typeid:24,uuid:"CA0DBCB2-938A-44DF-8722-CE2775B9524C"}
 */
function valores_anticipos_getDataSetForValueList(displayValue, realValue, record, valueListName) {
	var args
	if (displayValue == null && realValue == null) {
		return databaseManager.getDataSetByQuery("infocom", "select valor_descripcion, valor_id from valores where es_cheque=0 or (es_cheque=1 and es_propio=1) order by valor_descripcion", null, 100);
	} else if (displayValue != null) {
		
		args = [displayValue + "%", displayValue + "%"]
		return databaseManager.getDataSetByQuery("infocom", "select valor_descripcion, valor_id  from valores where valor_decripcion like ? and es_cheque=0 or (es_cheque=1 and es_propio=1) order by valor_descripcion", args, 100);
	} else if (realValue != null) {
		args = [realValue];
		return databaseManager.getDataSetByQuery("infocom", "select valor_descripcion, valor_id  from valores where valor_id = ?", args, 1);
	}
	return null
}

/**
 *
 * @properties={typeid:24,uuid:"C28C0C7F-3909-4EA9-B94D-59367F02D55F"}
 */
function titulos_resumen() 
{ // la variable globals.gproveedor_o_fletero se setea al iniciar la aplicacion NO DEBE CAMBIARSE luego
	if(globals.gproveedor_o_fletero==0)
	{
		globals.gresu_titu_1 = 'Proveedores'
		globals.gresu_titu_2 = 'Proveedor'
	}
	else
	{
	globals.gresu_titu_1 = 'Fleteros'
	globals.gresu_titu_2 = 'Fletero'
	}
}

/**
 *
 * @properties={typeid:24,uuid:"6682E0D6-1083-4842-BCB9-73F4D3C072F7"}
 */
function valores_adelantos_getDataSetForValueList(displayValue, realValue, record, valueListName) 
{
	var args
	if (displayValue == null && realValue == null) {
		return databaseManager.getDataSetByQuery("infocom", "select valor_descripcion, valor_id from valores where (es_cheque=0 and usa_cta_bco=0) or (es_cheque=1 and es_propio=1) order by valor_descripcion", null, 100);
	} else if (displayValue != null) {
		args = [displayValue + "%", displayValue + "%"]
		return databaseManager.getDataSetByQuery("infocom", "select valor_descripcion, valor_id  from valores where valor_descripcion like ? and (es_cheque=0 and usa_cta_bco=0) or (es_cheque=1 and es_propio=1) order by valor_descripcion", args, 100);
	} else if (realValue != null) {
		args = [realValue];
		return databaseManager.getDataSetByQuery("infocom", "select valor_descripcion, valor_id  from valores where valor_id = ?", args, 1);
	}
	return null
}

/**
 * @returns {Object}
 * 
 * @properties={typeid:24,uuid:"73EC8D6D-F225-410E-97DC-C41409E9716F"}
 * @AllowToRunInFind
 */
function reten_ganancias (fecha,importe)
{
	/*	var MONOTRIBUTO = 6
	var INSCRIPTO = 1
	var EXENTO = 4   // verificar si está bien no retenerle
	*/
	
	// en IMPORTE viene el NETO DE RETENCION  = NO hay que quitar iva  // 06/11/2013
	// var coefic = (100 + globals.greten_porc_iva_detraer) / 100  // 06/11/2013
	
	if (gproveedorreten_to_proveedor.retiene_ganancias != 1)
	{
		return 0
	}
	
	if (gproveedorreten_to_proveedor.regimen_ganancias_id == 0 || gproveedorreten_to_proveedor.regimen_ganancias_id == null)  
	{
		globals.DIALOGS.showWarningDialog('Aviso','El régimen de ganancias del proveedor es inválido - Cancele el pago','OK')
		return -1;
	}

	if (gproveedorreten_to_proveedor.proveedor_ganancias_to_reten_regimen.getSize() == 0)
	{
		globals.DIALOGS.showWarningDialog('Aviso','No existe el regimen de retencion codigo ' +  gproveedorreten_to_proveedor.regimen_ganancias_id  + ' cargado en el proveedor - Cancele el pago','OK')
		return -1;
	}

	if( gproveedorreten_to_proveedor.retiene_ganancias == 1) // 16/12/2010 no se usa la condicion de iva= se usa si se retiene o no ganancias
	{
		
		globals.gretencion_fechadesde = new Date(fecha.getFullYear(),fecha.getMonth(),1)
		globals.gretencion_fechahasta = fecha
		var neto_pagos_ant = 0
		var neto_ret = 0
		var f = databaseManager.getFoundSetCount(gproveedorreten_to_ctacte_pr_copy)
		for(var i = 1; i<=f;i++)
		{
			gproveedorreten_to_ctacte_pr_copy.setSelectedIndex(i)
			if(gproveedorreten_to_ctacte_pr_copy.ctacte_pr_to_tab_mov_pr.diario_pagos == 1)
			{
				//neto_pagos_ant += gproveedorreten_to_ctacte_pr_copy.neto_signo  // 14/11/2013
				neto_pagos_ant += gproveedorreten_to_ctacte_pr_copy.neto_retencion_signo   // 14/11/2013
			}
			if(gproveedorreten_to_ctacte_pr_copy.ctacte_pr_to_tab_mov_pr.reten_ganancias == 1)
			{
				neto_ret += gproveedorreten_to_ctacte_pr_copy.neto_signo
			}
		}
		neto_pagos_ant = neto_pagos_ant * (-1)
		neto_ret = neto_ret * (-1)
		
		// Si escomprobante M anula neto_ant y neto_ret
		if (gproveedorreten_to_proveedor.regimen_ganancias_id == 99)  // tipo M
		{
			neto_pagos_ant = 0
			neto_ret = 0
		}
		// define imponible y neto
		// usa auxiliar para no restar No sujeto a los que estan irregular Afip 18/07/2011
		var aux_monto_no_sujeto = 0
		if (gproveedorreten_to_proveedor.gan_irregular != 1)
			{
				aux_monto_no_sujeto = gproveedorreten_to_proveedor.proveedor_ganancias_to_reten_regimen.monto_no_sujeto
			}
		if ((gproveedorreten_to_proveedor.inscripto_ganancias != 1) && 
			// (gproveedorreten_to_proveedor.proveedor_ganancias_to_reten_regimen_ganancias.aplica_no_sujeto_a_no_insc == 0)) // 16/12/2010
			(gproveedorreten_to_proveedor.proveedor_ganancias_to_reten_regimen.aplica_no_sujeto_a_no_insc == 0)) // 16/12/2010
		{
			//  var neto_pagos = (neto_pagos_ant + importe) / coefic  // 06/11/2013  se elimina coefic
			var neto_pagos = (neto_pagos_ant + importe)     // 06/11/2013
			var no_imponible = 0   // 03/10/2010 para guardarlo en array
		}
		else
		{
			// var neto_pagos = ((neto_pagos_ant + importe) / coefic) - aux_monto_no_sujeto  // 06/11/2013  se elimina coefic
			var neto_pagos = (neto_pagos_ant + importe) - aux_monto_no_sujeto   // 06/11/2013
			var no_imponible = aux_monto_no_sujeto // 03/10/2010 para guardarlo en array
		}
		// var  subtotal = (neto_pagos_ant + importe) / coefic   // 06/11/2013  se elimina coefic
		var  subtotal = (neto_pagos_ant + importe)       // 06/11/2013
		if (neto_pagos < 0)
			neto_pagos = 0
		// obtiene porc. de impuesto	
		// if (gproveedorreten_to_proveedor.tipo_iva_id == INSCRIPTO)  //16/12/2010
		if (gproveedorreten_to_proveedor.inscripto_ganancias==1)  
		{
			var res_array
			if (gproveedorreten_to_proveedor.proveedor_ganancias_to_reten_regimen.porc_insc_en_escala == 0)
			{
				var porc = gproveedorreten_to_proveedor.proveedor_ganancias_to_reten_regimen.porc_insc
				res_array = porc
			}
			else
			{
				//    var porc = buscarEscala(importe,'si')    // 07-03-2013
				var ret_escala = buscarEscala(neto_pagos,'si') // 07-03-2013
				if (ret_escala == -1)
					return -1;
				res_array = ret_escala
			}
			var min = gproveedorreten_to_proveedor.proveedor_ganancias_to_reten_regimen.min_ret_insc
		}
		else
		{
			var res_array
			if (gproveedorreten_to_proveedor.proveedor_ganancias_to_reten_regimen.porc_no_insc_en_escala == 0)
			{
				var porc = gproveedorreten_to_proveedor.proveedor_ganancias_to_reten_regimen.porc_no_insc
				res_array = porc
			}
			else
			{
				//    var porc = buscarEscala(importe,'no')    // 07-03-2013
				var ret_escala = buscarEscala(neto_pagos,'no') // 07-03-2013
				if (ret_escala == -1)
					return -1;
				res_array = ret_escala
			}
			var min = gproveedorreten_to_proveedor.proveedor_ganancias_to_reten_regimen.min_ret_no_insc
		}
		// 03/10/2010 mejor redondeo
		//  var reten_total = ((neto_pagos * 100) * (porc * 100)) / 1000000    // 07/03/2013 asi estaba antes de la correccion

		if (gproveedorreten_to_proveedor.inscripto_ganancias==1) // 07-03-2013 nuevo = caso con escala

		{
			if (gproveedorreten_to_proveedor.proveedor_ganancias_to_reten_regimen.porc_insc_en_escala == 0)
				var reten_total = ((neto_pagos * 100) * (porc * 100)) / 1000000 
			else   // caso con escala
				var reten_total = ret_escala 
		}
		else
		{
			if (gproveedorreten_to_proveedor.proveedor_ganancias_to_reten_regimen.porc_no_insc_en_escala == 0)
				var reten_total = ((neto_pagos * 100) * (porc * 100)) / 1000000 
			else  // caso con escala
				var reten_total = ret_escala 
		}
		
		var reten = reten_total - neto_ret
		
		if (reten >= min)
		{
			var ar_ganancias = new Array()
			ar_ganancias[0] = gproveedorreten_to_proveedor.regimen_ganancias_id
			//ar_ganancias[1] = neto_pagos_ant / coefic    // 06/11/2013  se elimina coefic
			ar_ganancias[1] = neto_pagos_ant  // 06/11/2013
			// ar_ganancias[2] = min anulado
			ar_ganancias[2] = no_imponible   
			ar_ganancias[3] = neto_pagos
			ar_ganancias[4] = res_array
			ar_ganancias[5] = reten_total
			ar_ganancias[6] = neto_ret
			ar_ganancias[7] = reten
			ar_ganancias[8] = subtotal
			//ar_ganancias[9] = importe  / coefic   // 06/11/2013  se elimina coefic
			ar_ganancias[9] = importe // 06/11/2013 
			return ar_ganancias
		}
		else
			return 0
	}
	else
		return 0
	
}

/**
 * @properties={typeid:24,uuid:"A5892B1B-E9CA-4BB2-9A19-87F8595DCDE2"}
 */
function buscarEscala (importe,inscripto)
{
	/*  // 07-03-2013
	var i = 1
	gproveedorreten_to_proveedor.proveedor_to_reten_regimen.reten_regimen_to_reten_escalas.sort('monto_desde asc')
	while (i<=gproveedorreten_to_proveedor.proveedor_to_reten_regimen.reten_regimen_to_reten_escalas.getSize()) 
	{
		gproveedorreten_to_proveedor.proveedor_to_reten_regimen.reten_regimen_to_reten_escalas.setSelectedIndex(i)
		if (importe > gproveedorreten_to_proveedor.proveedor_to_reten_regimen.reten_regimen_to_reten_escalas.monto_hasta)
			i++
		else
		{
			if (inscripto == 'si')
				return gproveedorreten_to_proveedor.proveedor_to_reten_regimen.reten_regimen_to_reten_escalas.porc_inscripto
			else
				return gproveedorreten_to_proveedor.proveedor_to_reten_regimen.reten_regimen_to_reten_escalas.porc_no_inscripto
		}
	}   */
	
	var monto_ret = 0.00
	var tramo_sig = 0.00
	if (gproveedorreten_to_proveedor.proveedor_ganancias_to_reten_regimen.reten_regimen_to_reten_escalas)
	{
		var cant_escalas = gproveedorreten_to_proveedor.proveedor_ganancias_to_reten_regimen.reten_regimen_to_reten_escalas.getSize()
		if (cant_escalas == 0)
		{
			globals.DIALOGS.showWarningDialog('Aviso','No hay escalas cargadas para la retencion codigo ' +  gproveedorreten_to_proveedor.regimen_ganancias_id  + ' - Revise datos','OK')
			return -1;
		}
		gproveedorreten_to_proveedor.proveedor_ganancias_to_reten_regimen.reten_regimen_to_reten_escalas.sort('monto_desde asc')
		for (var i = 1 ; i<=cant_escalas ; i++) 
		{
			gproveedorreten_to_proveedor.proveedor_ganancias_to_reten_regimen.reten_regimen_to_reten_escalas.setSelectedIndex(i)
			if (importe > gproveedorreten_to_proveedor.proveedor_ganancias_to_reten_regimen.reten_regimen_to_reten_escalas.monto_desde
				&& importe < gproveedorreten_to_proveedor.proveedor_ganancias_to_reten_regimen.reten_regimen_to_reten_escalas.monto_hasta)
			{
				tramo_sig = importe - gproveedorreten_to_proveedor.proveedor_ganancias_to_reten_regimen.reten_regimen_to_reten_escalas.monto_desde
				monto_ret = gproveedorreten_to_proveedor.proveedor_ganancias_to_reten_regimen.reten_regimen_to_reten_escalas.imp_base_ret	
				if (inscripto == 'si')
					monto_ret = monto_ret + ((tramo_sig * gproveedorreten_to_proveedor.proveedor_ganancias_to_reten_regimen.reten_regimen_to_reten_escalas.porc_inscripto) / 100)
				else
					monto_ret = monto_ret + ((tramo_sig * gproveedorreten_to_proveedor.proveedor_ganancias_to_reten_regimen.reten_regimen_to_reten_escalas.porc_no_inscripto) / 100)
				return monto_ret	
			}
		}
	}
	else // cuando no encuentra la relacion  // esta de mas? porque no llega aqui si no existe la 2da relacion 
	{
		globals.DIALOGS.showWarningDialog('Aviso','Revise Régimen cargado en proveedor con código ' + globals.gProveedorReten + ' , régimen con código ' + gproveedorreten_to_proveedor.proveedor_ganancias_to_reten_regimen.reten_regimen_id + ' y escalas cargadas para ese régimen - Cancele el pago ','OK')
		return -1;
	}
	return -1
}

/**
 * @return {Object}
 * @properties={typeid:24,uuid:"689D6EDD-989E-4C2B-90D2-E3AFBDA6A944"}
 */
function reten_iva (fecha,importe)
{
	if (gproveedorreten_to_proveedor.retiene_iva != 1)
	{
		return 0
	}
	
	if (gproveedorreten_to_proveedor.regimen_iva_id == 0 || 
	gproveedorreten_to_proveedor.regimen_iva_id == null)
	{
		globals.DIALOGS.showWarningDialog('Aviso','El regimen de IVA del proveedor es invalido - Cancele el pago','OK')
		return -1;   // error
	}
	
	if (gproveedorreten_to_proveedor.proveedor_iva_to_reten_regimen.getSize() == 0)
	{
		globals.DIALOGS.showWarningDialog('Aviso','No existe el regimen de retencion de IVA codigo ' +  gproveedorreten_to_proveedor.regimen_iva_id  + ' cargado en el proveedor - Cancele el pago','OK') 
		return -1;
	}
	
	globals.greten_iva_imponible = (importe - (importe / ((100 + globals.greten_porc_iva_detraer) / 100) ) )
	var porc = gproveedorreten_to_proveedor.proveedor_iva_to_reten_regimen.porc_insc
	if (gproveedorreten_to_proveedor.ret_iva_porc_exclusion != null)
	{
		var reten = globals.greten_iva_imponible * porc / 100 * (100 - gproveedorreten_to_proveedor.ret_iva_porc_exclusion) *  100
		var imponible = globals.greten_iva_imponible * (100 - gproveedorreten_to_proveedor.ret_iva_porc_exclusion) *  100
	}
	else
	{
		var reten = globals.greten_iva_imponible * porc / 100
		var imponible = globals.greten_iva_imponible
	}
	reten = reten
	var min = gproveedorreten_to_proveedor.proveedor_iva_to_reten_regimen.min_ret_insc
	if (reten >= min)
	{
		var ar_iva = new Array()
		ar_iva[0] = gproveedorreten_to_proveedor.regimen_iva_id
		ar_iva[1] = imponible
		ar_iva[2] = porc
		ar_iva[3] = reten
		return ar_iva
	}
	else
		return 0
}

/**
 * @param {Date} fecha
 * @param {Number} importe
 *
 * @return {Object}
 * @properties={typeid:24,uuid:"1B16AE7B-AB84-4BE8-8E90-9EFB4E0BFADC"}
 */
function reten_ingbrutos(fecha,importe)
{
	// Retencion Ing Brutos modelo ARBA : usa alicuota de tabla de proveedores

	if (gproveedorreten_to_proveedor.retiene_ing_brutos != 1)
	{
		return 0
	}
	
	if (gproveedorreten_to_proveedor.regimen_ret_ing_brutos == 0 || 
	gproveedorreten_to_proveedor.regimen_ret_ing_brutos == null)   //  16/12/2010
	{
		globals.DIALOGS.showWarningDialog('Aviso','El regimen de Ingresos Brutos del proveedor es invalido - Cancele el pago','OK')
		return -1;   // error
	}
	
	if (gproveedorreten_to_proveedor.proveedor_ib_to_reten_regimen.getSize() == 0)
	{
		globals.DIALOGS.showWarningDialog('Aviso','No existe el regimen de retencion de Ingresos Brutos codigo ' +  gproveedorreten_to_proveedor.regimen_ret_ing_brutos  + ' cargado en el proveedor - Cancele el pago','OK') 
		return -1;
	}
	
	if (gproveedorreten_to_proveedor.ib_porc_retencion == null)
	{
		return 0
	}
	if (importe <= gproveedorreten_to_proveedor.proveedor_ib_to_reten_regimen.monto_minimo)
	{
		return 0
	}
	//var coefic 		= globals.greten_porc_iva_detraer
	var imponible 	= importe - gproveedorreten_to_proveedor.proveedor_ib_to_reten_regimen.monto_no_sujeto
	var porc 		= gproveedorreten_to_proveedor.ib_porc_retencion
	var reten 		= imponible * porc / 100 
	reten			= reten
	if (reten >= gproveedorreten_to_proveedor.proveedor_ib_to_reten_regimen.min_ret_insc)
	{
		var ar_ib = new Array()
		ar_ib[0] = gproveedorreten_to_proveedor.regimen_ret_ing_brutos
		ar_ib[1] = imponible
		ar_ib[2] = porc
		ar_ib[3] = reten
		return ar_ib
	}
	else
		return 0
}

/**
 * @properties={typeid:24,uuid:"DFC55FE4-F493-4505-821D-E850EF84C482"}
 */
function retenciones_previo(fecha,proveedor,importe) {
	globals.gProveedorReten = proveedor
	
	var reten = new Array()
	if (importe > 0)
	{
		reten[0] = globals.reten_ganancias (fecha,importe)
		reten[1] = globals.reten_iva (fecha,importe)
		reten[2] = globals.reten_ingbrutos (fecha,importe)
	}
	else
	{
		reten.push(0)
		reten.push(0)
		reten.push(0)
	}
	return reten
}

/**
 * 
 * @return {Object}
 * 
 * @properties={typeid:24,uuid:"DC598211-2BE9-4404-A6E3-C92910519192"}
 * @AllowToRunInFind
 */
function retenciones_final (nombreform,fecha, proveedor, importe, tipo_pago, nro_orden_pago,ar_ganancias,ar_iva,ar_ib)
{    
	// obtiene nombre de la relacion para usarlo como variable a continuacion del nombre del form 01/11/2010
	// para que sirva para ambas relaciones: op_cabecera_to_reten_certificados y orden_servicio_to_reten_certificados 01/11/2010
	var rel = solutionModel.getRelations(forms[nombreform].controller.getDataSource())
	var i = 0 
	while ((i < rel.length) && (rel[i].name.indexOf('reten_certificados', 0) == -1))
	{ 
		i++
	}
	if (i < rel.length)
	{
		var relacion = rel[i].name	
	}
    	
	if ((ar_ganancias != 0) || (ar_iva != 0) || (ar_ib != 0))
	{
		var fs = databaseManager.getFoundSet('infocom','reten_certificados')
		forms[nombreform][relacion].newRecord()
		forms[nombreform][relacion].fecha 			= fecha
		forms[nombreform][relacion].tipo_pago 		= tipo_pago
		forms[nombreform][relacion].numero_ord_pago = nro_orden_pago
		forms[nombreform][relacion].proveedor_id 	= proveedor
		//BUSCAR LOS NROS DE IVA Y GANANCIAS 
		if (ar_ganancias != 0)
		{
			//  buscar en numeracion _pr codigo 82 - Ganancias
			var fs_nro_gan = databaseManager.getFoundSet('infocom','numeracion_pr')
			fs_nro_gan.find()
			fs_nro_gan.sucursal			= globals.gSucursal
			fs_nro_gan.letra			= 'X'
			fs_nro_gan.cod_comprobante	= globals.zconf_numeracion_retencion_ganancias
			var found = fs_nro_gan.search()
			if (found != 1)
   	 		{
				globals.DIALOGS.showWarningDialog('Aviso','Sucursal o Tipo de comprobante incorrectos al buscar numeración retención Ganancias','OK')
			   	return false;
   	 		}
   	 	 	else
   	  		{	
			  	fs_nro_gan.setSelectedIndex(1)
			  	fs_nro_gan.ultimo_numero = fs_nro_gan.ultimo_numero + 1
   	  		}
		  
			forms[nombreform][relacion].gan_nro					= fs_nro_gan.ultimo_numero;
			forms[nombreform][relacion].gan_importe 			= ar_ganancias[7]
			forms[nombreform][relacion].gan_importe_letras 		= globals.nro_a_letra(forms[nombreform][relacion].gan_importe)
			forms[nombreform][relacion].gan_reten_regimen_id 	= ar_ganancias[0] 
			forms[nombreform][relacion].gan_pagos_anteriores 	= ar_ganancias[1]
			forms[nombreform][relacion].gan_pagos_presente 		= ar_ganancias[9]
			forms[nombreform][relacion].gan_subtotal 			= ar_ganancias[1] + ar_ganancias[9] // 07/02/2012 para evitar error de redondeo por coef iva
			forms[nombreform][relacion].gan_minimo 				= ar_ganancias[2]
			forms[nombreform][relacion].gan_imponible 			= ar_ganancias[3]
			forms[nombreform][relacion].gan_porc_retencion 		= ar_ganancias[4]
			forms[nombreform][relacion].gan_total 				= ar_ganancias[5]
			forms[nombreform][relacion].gan_ret_anterior 		= ar_ganancias[6]	                                   
		}
		if (ar_iva != 0)
		{
			//  buscar en numeracion _pr codigo 81 - IVA
			var fs_nro_iva = databaseManager.getFoundSet('infocom','numeracion_pr')
			fs_nro_iva.find()
			fs_nro_iva.sucursal			= globals.gSucursal
			fs_nro_iva.letra			= 'X'
			fs_nro_iva.cod_comprobante	= globals.zconf_numeracion_retencion_iva
			var found = fs_nro_iva.search()
			if (found != 1)
   	 		{
				globals.DIALOGS.showWarningDialog('Aviso','Sucursal o Tipo de comprobante incorrectos al buscar numeracion retención IVA','OK')
			   	return false;
   	 		}
   	 	 	else
   	  		{	
			  	fs_nro_iva.setSelectedIndex(1)
			  	fs_nro_iva.ultimo_numero = fs_nro_iva.ultimo_numero + 1
   	  		}
		  
			forms[nombreform][relacion].iva_nro					= fs_nro_iva.ultimo_numero;
			forms[nombreform][relacion].iva_importe 			= ar_iva[3]
			forms[nombreform][relacion].iva_importe_letras 		= globals.nro_a_letra(forms[nombreform][relacion].iva_importe)
			forms[nombreform][relacion].iva_reten_regimen_id 	= ar_iva[0]
			forms[nombreform][relacion].iva_imponible 			= ar_iva[1]
			forms[nombreform][relacion].iva_alicuota 			= ar_iva[2]
		}
		if (ar_ib != 0)
		{
			//  buscar en numeracion _pr codigo 83 - IIBB
			var fs_nro_ib = databaseManager.getFoundSet('infocom','numeracion_pr')
			fs_nro_ib.find()
			fs_nro_ib.sucursal 			= globals.gSucursal
			fs_nro_ib.letra				= 'X'
			fs_nro_ib.cod_comprobante	= globals.zconf_numeracion_retencion_iibb
			var found = fs_nro_ib.search()
			if (found != 1)
   	 		{
				globals.DIALOGS.showWarningDialog('Aviso','Sucursal o Tipo de comprobante incorrectos al buscar numeración retención Ing Brutos','OK')
			   	return false;
   	 		}
   	 	 	else
   	  		{	
			  	fs_nro_ib.setSelectedIndex(1)
			  	fs_nro_ib.ultimo_numero = fs_nro_ib.ultimo_numero + 1
   	  		}
		  
			forms[nombreform][relacion].ib_nro 				= fs_nro_ib.ultimo_numero;
			forms[nombreform][relacion].ib_importe 			= ar_ib[3]
			forms[nombreform][relacion].ib_importe_letras 	= globals.nro_a_letra(forms[nombreform][relacion].ib_importe)
			forms[nombreform][relacion].ib_reten_regimen_id = ar_ib[0]
			forms[nombreform][relacion].ib_imponible 		= ar_ib[1]
			forms[nombreform][relacion].ib_alicuota 		= ar_ib[2]
		}
		databaseManager.refreshRecordFromDatabase(fs, -1)
	}
	return true
}

/**
 * @properties={typeid:24,uuid:"72E8C361-4818-4016-8AE1-8BC7C604945A"}
 */
function retenciones_inverso(fecha,proveedor,importe) {
	// calcula el importe ampliado que debe tener un comprobante considerando las retenciones
	// usado en Ordenes de Servicio de Logistica
	globals.gProveedorReten = proveedor
	var ret_gan = 0
/*	var ret_iva = 0
	var ret_tot = 0*/
	var porcent = 0
	var aumento = 0 
	var ret = 0
	//Si importe es negativo se calcula como igual a 0
	if (importe < 0)
		importe = 0
	var importe_tot = importe
	// calcula para retencion  IVA	para comprob M
	if (gproveedorreten_to_proveedor.regimen_iva_id == 199) // tipo comprobante = M
	{
		importe_tot = importe_tot * (100 + globals.greten_porc_iva_detraer) / 100
	}
	// calcula retencion Ganancias
	ret = globals.reten_ganancias (fecha,importe_tot)
	if (ret != 0)
	{
		ret_gan = ret[7] 
		porcent = (100 - ret[4]) / 100 
		aumento = (ret_gan / porcent)
		if (gproveedorreten_to_proveedor.regimen_iva_id == 199) // tipo comprobante = M
		{
			aumento = aumento * (100 + globals.greten_porc_iva_detraer) / 100
		}
		importe_tot = importe_tot + aumento
	}
	
	return importe_tot
}

/**
 * @param {Number} tipo_opago
 * @param {Number} [total_pago]
 *
 * @properties={typeid:24,uuid:"A4B83848-B9D3-4BEF-8835-479255D4E30C"}
 */
function opago_diferencia(tipo_opago,total_pago) 
{
	if (tipo_opago != 1)
		globals.gdiferencia = total_pago - globals.gtotal_valores - globals.gtotal_retenciones;
	else
		globals.gdiferencia = globals.gtotal_comprob - globals.gtotal_valores - globals.gtotal_retenciones;
}

/**
 * Called when the valuelist needs data, it has 3 modes.
 * real and display params both null: return the whole list
 * only display is specified, called by a typeahead, return a filtered list
 * only real value is specified, called when the list doesnt contain the real value for the give record value, this will insert this value into the existing list
 *
 * @param {String} displayValue The value of a lookupfield that a user types
 * @param {Object} realValue The real value for a lookupfield where a display value should be get for
 * @param {JSRecord} record The current record for the valuelist.
 * @param {String} valueListName The valuelist name that triggers the method.
 *
 * @returns {JSDataSet} A dataset with 1 or 2 columns display[,real]
 *
 * @properties={typeid:24,uuid:"B3350BBD-0D36-46FB-9EAB-7EB9944E593E"}
 */
function proveedor_consulta_getDataSetForValueList(displayValue, realValue, record, valueListName) 
{   
	var args
	if (displayValue == null && realValue == null) 
	{
		if (globals.gproveedor_o_fletero==1)
			return databaseManager.getDataSetByQuery("infocom", "select razon_social, proveedor_id, es_fletero from proveedor where razon_social <> NULL and razon_social <> ' ' and es_fletero=1 order by razon_social asc", null, -1);
		else
			return databaseManager.getDataSetByQuery("infocom", "select razon_social, proveedor_id, es_fletero from proveedor where razon_social <> NULL and razon_social <> ' ' order by razon_social asc", null, -1);
	}
	else 
	{
		if (displayValue != null)    
		{
			
			args = [displayValue + "%", displayValue + "%"]
			if (globals.gproveedor_o_fletero==1)
				return databaseManager.getDataSetByQuery("infocom", "select razon_social, proveedor_id from proveedor where razon_social like ? and es_fletero=1", args, -1);
			else
				return databaseManager.getDataSetByQuery("infocom", "select razon_social, proveedor_id from proveedor where razon_social like ? ", args, -1);
		}
		else 
		{
			if (realValue != null) 
			{
				args = [realValue];
				return databaseManager.getDataSetByQuery("infocom", "select razon_social, proveedor_id from proveedor where proveedor_id = ?", args, 1);
			}
		}
	}
	return null
}

/**
 *
 * @properties={typeid:24,uuid:"5E9DC5C9-7757-43C2-813A-F7883E78F9AA"}
 */
function duplicacion_op_cabecera(letra,sucursal,nro_aux,codigo_movimiento) 
{
	var maxReturnedRows = 10;
	var query = 'SELECT letra,sucursal,nro_comprobante,codigo_movimiento '+
				'FROM op_cabecera '+ 
				'WHERE letra = ? and sucursal = ? and nro_comprobante = ? and codigo_movimiento = ? AND userv_id = ?'
	var args = [letra, sucursal, nro_aux, codigo_movimiento, globals.gUservID]
	var dataset = databaseManager.getDataSetByQuery('infocom', query, args, maxReturnedRows);
	globals.gfilas = dataset.getMaxRowIndex() // si es cero, no existe
}

/**
 * @properties={typeid:24,uuid:"A5540C17-AF93-4C3D-B0E1-05185E1659EA"}
 */
function duplicacion_oc_cabecera(letra,sucursal,nro_aux,codigo_movimiento) 
{
	var maxReturnedRows = 10;
	var query = 'select letra,sucursal,nro_oc from oc_cabecera where letra = ? and sucursal = ? and nro_oc = ?';
	var args = new Array();
	args[0] = letra
	args[1] = sucursal
	args[2] = nro_aux
	var dataset = databaseManager.getDataSetByQuery('infocom', query, args, maxReturnedRows);
	return dataset.getMaxRowIndex() // si es cero, no existe
}

/**
 *
 * @properties={typeid:24,uuid:"4BEEC961-FCF8-487A-AFC5-6B50CC3487B2"}
 */
function duplicacion_cheques(valor,banco,nro) 
{
	var maxReturnedRows = 10;//useful to limit number of rows
	var query = 'select valor_id,banco_id,cheque_nro from cheques where valor_id = ? and banco_id = ? and cheque_nro = ?';
	var args = new Array();
	args[0] = valor
	args[1] = banco
	args[2] = nro
	var dataset = databaseManager.getDataSetByQuery('infocom', query, args, maxReturnedRows);
	globals.gfilas=dataset.getMaxRowIndex() // si es cero, la factura no existe
}

/**
 *
 * @properties={typeid:24,uuid:"C2D94CA5-1789-4960-9376-A098A7925E1B"}
 */
function duplicacion_rec_cabecera(letra,sucursal,nro_aux,codigo_movimiento) 
{
	var maxReturnedRows = 10;//useful to limit number of rows
	var query = 'select letra,sucursal,nro_comprobante,codigo_movimiento from rec_cabecera where letra = ? and sucursal = ? and nro_comprobante = ? and codigo_movimiento = ?';
	var args = new Array();
	args[0] = letra
	args[1] = sucursal
	args[2] = nro_aux
	args[3] = codigo_movimiento
	//var dataset = databaseManager.getDataSetByQuery(databaseManager.getDataSourceServerName(controller.getDatasource()), query, args, maxReturnedRows);
	var dataset = databaseManager.getDataSetByQuery('infocom', query, args, maxReturnedRows);
	globals.gfilas=dataset.getMaxRowIndex() // si es cero, no existe
}

/**
 * @properties={typeid:24,uuid:"E60DBBB2-1AC4-4724-8E1A-A733C23428B6"}
 */
function cancelaBaja(record) {
	   return false
}

/**
 * Record pre-insert trigger.
 * Validate the record to be inserted.
 * When false is returned the record will not be inserted in the database.
 * When an exception is thrown the record will also not be inserted in the database but it will be added to databaseManager.getFailedRecords(),
 * the thrown exception can be retrieved via record.exception.getValue().
 *
 * @param {JSRecord<db:/infocom/ctacte_cl>} record record that will be inserted
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"1146E21B-E65D-485E-9550-1026020EB29E"}
 */
function ctacte_cl_onRecordInsert(record) {
	record.fecha_vto_text 	= utils.dateFormat(record.fecha_vto,'yyyyMMdd')
	record.comprob_completo = record.letra + '-' + utils.numberFormat(record.sucursal,'0000') + '-' + utils.numberFormat(record.nro_factura,'00000000');
	record.cotizacion_dolar = dolar.cotizacion
	
	if (record.letra == 'E')
	{
		record.neto_signo_diario =  0;
		if (record.neto_no_gravado == 0)
		{
			if (record.ctacte_cl_to_tab_mov_cl_copia.d_h == 2)
				record.neto_no_gravado_signo_diario = record.neto * (-1);
			else
				record.neto_no_gravado_signo_diario = record.neto;
		}
		else
		{
			if (record.ctacte_cl_to_tab_mov_cl_copia.d_h == 2)
				record.neto_no_gravado_signo_diario = record.neto_no_gravado * (-1);
			else 
				record.neto_no_gravado_signo_diario = record.neto_no_gravado;
		}
		
	}
	else
	{  // es lo mismo que neto_signo
		if (record.ctacte_cl_to_tab_mov_cl_copia.d_h == 2)
			record.neto_signo_diario = record.neto * (-1);
		else
			record.neto_signo_diario = record.neto;
	}
	
	if (record.ctacte_cl_to_tab_mov_cl_copia.d_h == 2)
	{
		record.neto_no_gravado_signo 	= record.neto_no_gravado * (-1);
		record.credito_saldo			= record.saldo
		record.debito_saldo				= null
		record.saldo_signo				= record.saldo * (-1)
		record.importe_signo_cobranza	= record.importe
		record.debito					= null
		record.credito					= record.importe
		record.iva_signo				= record.iva * (-1)
		record.iva_2_signo				= record.iva_2 * (-1)
		record.iva_3_signo				= record.iva_3 * (-1)
		record.neto_signo				= record.neto * (-1)
		record.neto_2_signo				= record.neto_2 * (-1)
		record.neto_3_signo				= record.neto_3 * (-1)
		record.importe_signo			= record.importe * (-1)
		record.ib_percep_signo			= record.ib_percep * (-1)
	}
	else
	{
		record.neto_no_gravado_signo 	= record.neto_no_gravado;
		record.credito_saldo			= null
		record.debito_saldo				= record.saldo
		record.saldo_signo				= record.saldo
		record.importe_signo_cobranza	= record.importe * (-1)
		record.debito					= record.importe
		record.credito					= null
		record.iva_signo				= record.iva
		record.iva_2_signo				= record.iva_2
		record.iva_3_signo				= record.iva_3
		record.neto_signo				= record.neto
		record.neto_2_signo				= record.neto_2
		record.neto_3_signo				= record.neto_3
		record.importe_signo			= record.importe
		record.ib_percep_signo			= record.ib_percep
	}
	return true
}

/**
 * Record pre-insert trigger.
 * Validate the record to be inserted.
 * When false is returned the record will not be inserted in the database.
 * When an exception is thrown the record will also not be inserted in the database but it will be added to databaseManager.getFailedRecords(),
 * the thrown exception can be retrieved via record.exception.getValue().
 *
 * @param {JSRecord<db:/infocom/fac_detalle>} record record that will be inserted
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"5DF63D8C-ECFD-48EF-8250-3B43B8488E67"}
 */
function fac_detalle_onRecordInsert(record) {
	record.total_renglon	= record.total_renglon + globals.gredondeo_constante
	record.precio_unitario	= record.precio_unitario + globals.gredondeo_constante   // 17/12/2010
	return true
}

/**
 * Record pre-insert trigger.
 * Validate the record to be inserted.
 * When false is returned the record will not be inserted in the database.
 * When an exception is thrown the record will also not be inserted in the database but it will be added to databaseManager.getFailedRecords(),
 * the thrown exception can be retrieved via record.exception.getValue().
 *
 * @param {JSRecord<db:/infocom/fac_cabecera>} record record that will be inserted
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"268B39BD-19FE-4438-B68B-8B033638B623"}
 */
function fac_cabecera_onRecordInsert(record) {
	record.fecha 		= new Date( record.fecha.getFullYear(), record.fecha.getMonth(), record.fecha.getDate(), 0,0,0,0)
	record.subtotal1	= record.subtotal1 + globals.gredondeo_constante
	record.subtotal2	= record.subtotal2 + globals.gredondeo_constante
	record.iva1_imp		= record.iva1_imp + globals.gredondeo_constante
	record.total		= record.total + globals.gredondeo_constante
	return true
}

/**
 * Record pre-insert trigger.
 * Validate the record to be inserted.
 * When false is returned the record will not be inserted in the database.
 * When an exception is thrown the record will also not be inserted in the database but it will be added to databaseManager.getFailedRecords(),
 * the thrown exception can be retrieved via record.exception.getValue().
 *
 * @param {JSRecord<db:/infocom/liq_cabecera>} record record that will be inserted
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"13ED4767-B83D-4419-AFD9-525D548D9E0B"}
 */
function liq_cabecera_onRecordInsert(record) {
	
	record.subtotal1	= record.subtotal1 + globals.gredondeo_constante
	record.iva1_imp		= record.iva1_imp + globals.gredondeo_constante
	record.total		= record.total + globals.gredondeo_constante
	record.neto			= record.neto + globals.gredondeo_constante
	record.comision		= record.comision + globals.gredondeo_constante
	record.gastos		= record.gastos + globals.gredondeo_constante
	return true
}

/**
 * Record pre-insert trigger.
 * Validate the record to be inserted.
 * When false is returned the record will not be inserted in the database.
 * When an exception is thrown the record will also not be inserted in the database but it will be added to databaseManager.getFailedRecords(),
 * the thrown exception can be retrieved via record.exception.getValue().
 *
 * @param {JSRecord<db:/infocom/ctacte_pr>} record record that will be inserted
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"383B764C-50B7-4701-BF92-DD879E611C83"}
 */
function ctacte_pr_onRecordInsert(record) {

	record.fecha_mov			= record.fecha_mov.setHours(00, 00, 00, 00);  
	if (record.fecha_presentacion != null)
		record.fecha_presentacion	= record.fecha_presentacion.setHours(00, 00, 00, 00);
	else
		record.fecha_presentacion	= record.fecha_mov
	record.comprob_completo 		= record.letra + '-' + utils.numberFormat(record.sucursal,'0000') + '-' + utils.numberFormat(record.nro_factura,'00000000');
	record.neto_retencion           = record.neto + record.neto_2 + record.neto_3 + record.neto_no_gravado
	
	if (record.ctacte_pr_to_tab_mov_pr.d_h == 1)
	{
		record.credito 					= record.importe
		record.credito_saldo 			= record.saldo 
		record.credito_saldo_inverso 	= record.importe - record.saldo
		record.debito 					= null
		record.debito_saldo 			= null
		record.debito_saldo_inverso 	= null
		record.ib_percep_signo			= record.ing_brut_percep * (-1)
		record.ganancias_percep_signo	= record.ganancias_percep * (-1)
		record.importe_signo			= record.importe * (-1)
		record.itc_signo				= record.itc * (-1)
		record.iva_signo				= record.iva * (-1)
		record.iva_2_signo				= record.iva_2 * (-1)
		record.iva_3_signo				= record.iva_3 * (-1)
		record.iva_percep_signo			= record.iva_percep * (-1)
		record.neto_signo				= record.neto * (-1)
		record.neto_2_signo				= record.neto_2 * (-1)
		record.neto_3_signo				= record.neto_3 * (-1)
		record.neto_no_gravado_signo	= record.neto_no_gravado * (-1)
		record.saldo_signo				= record.saldo * (-1)
		record.importe_signo_pagos		= record.importe
		record.neto_retencion_signo 	= record.neto_retencion * (-1);
	}
	else
	{
		record.credito 					= null
		record.credito_saldo 			= null
		record.credito_saldo_inverso 	= null
		record.debito 					= record.importe
		record.debito_saldo 			= record.saldo
		record.debito_saldo_inverso 	= record.importe - record.saldo
		record.ib_percep_signo			= record.ing_brut_percep
		record.ganancias_percep_signo	= record.ganancias_percep
		record.importe_signo			= record.importe
		record.itc_signo				= record.itc
		record.iva_signo				= record.iva
		record.iva_2_signo				= record.iva_2
		record.iva_3_signo				= record.iva_3
		record.iva_percep_signo			= record.iva_percep
		record.neto_signo				= record.neto
		record.neto_2_signo				= record.neto_2
		record.neto_3_signo				= record.neto_3
		record.neto_no_gravado_signo	= record.neto_no_gravado
		record.saldo_signo				= record.saldo
		record.importe_signo_pagos		= record.importe * (-1)
		record.neto_retencion_signo 	= record.neto_retencion
	}
	record.saldo_inverso			= record.importe - record.saldo
	
	var $tot_neto 	= 0
	var $tot_iva 	= 0
	var $porc		= ''
	if (record.neto != 0 && record.neto != null)
	{
		$tot_neto	= record.neto_signo
		$tot_iva	= record.iva_signo
		if (record.ctacte_pr_to_tasa_iva_porc != null && record.ctacte_pr_to_tasa_iva_porc.porc_impresion != ' ')
			$porc	= record.ctacte_pr_to_tasa_iva_porc.porc_impresion;
	}
	if (record.neto_2 != 0 && record.neto_2 != null)
	{
		$tot_neto	+= record.neto_2_signo
		$tot_iva	+= record.iva_2_signo
		if (record.ctacte_pr_to_tasa_iva_porc_2.porc_impresion != null && record.ctacte_pr_to_tasa_iva_porc_2.porc_impresion != ' ')
			$porc += '-' + record.ctacte_pr_to_tasa_iva_porc_2.porc_impresion;
	}
	if (record.neto_3 != 0 && record.neto_3 != null)
	{
		$tot_neto	+= record.neto_3_signo
		$tot_iva	+= record.iva_3_signo
		if (record.ctacte_pr_to_tasa_iva_porc_3.porc_impresion != null && record.ctacte_pr_to_tasa_iva_porc_3.porc_impresion != ' ')
			$porc += '-' + record.ctacte_pr_to_tasa_iva_porc_3.porc_impresion;
	}

	record.neto_impresion	= $tot_neto
	record.iva_impresion	= $tot_iva
	record.porc_impresion	= $porc

	return true
}

/**
 * Record pre-insert trigger.
 * Validate the record to be inserted.
 * When false is returned the record will not be inserted in the database.
 * When an exception is thrown the record will also not be inserted in the database but it will be added to databaseManager.getFailedRecords(),
 * the thrown exception can be retrieved via record.exception.getValue().
 *
 * @param {JSRecord<db:/infocom/op_cabecera>} record record that will be inserted
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"4780F947-21AF-4CE1-8AE8-3FC18ED7A4DE"}
 */
function op_cabecera_onRecordInsert(record) {
	
	record.importe				= record.importe + globals.gredondeo_constante
	record.total_valores		= record.total_valores + globals.gredondeo_constante
	record.total_retenciones	= record.total_retenciones + globals.gredondeo_constante
	record.total_comprobantes	= record.total_comprobantes + globals.gredondeo_constante
	return true
}

/**
 * Record pre-insert trigger.
 * Validate the record to be inserted.
 * When false is returned the record will not be inserted in the database.
 * When an exception is thrown the record will also not be inserted in the database but it will be added to databaseManager.getFailedRecords(),
 * the thrown exception can be retrieved via record.exception.getValue().
 *
 * @param {JSRecord<db:/infocom/rec_cabecera>} record record that will be inserted
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"C9583CFC-194B-4779-94D9-0D46F432B748"}
 */
function rec_cabecera_onRecordInsert(record) {
	record.importe 	= record.importe + globals.gredondeo_constante
	return true
}

/**
 * Record pre-update trigger.
 * Validate the record to be updated.
 * When false is returned the record will not be updated in the database.
 * When an exception is thrown the record will also not be updated in the database but it will be added to databaseManager.getFailedRecords(),
 * the thrown exception can be retrieved via record.exception.getValue().
 *
 * @param {JSRecord<db:/infocom/ctacte_pr>} record record that will be updated
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"955B009B-FC3E-4084-893B-998E3425A8F0"}
 */
function ctacte_pr_onRecordUpdate(record) {
	globals.ctacte_pr_onRecordInsert(record)
	if (record.ctacte_pr_to_tab_mov_pr.d_h == 1)
	{
		record.saldo_signo	= record.saldo * (-1)
	}
	else
	{
		record.saldo_signo	= record.saldo
	}
	
	return true
}

/**
 * Record pre-insert trigger.
 * Validate the record to be inserted.
 * When false is returned the record will not be inserted in the database.
 * When an exception is thrown the record will also not be inserted in the database but it will be added to databaseManager.getFailedRecords(),
 * the thrown exception can be retrieved via record.exception.getValue().
 *
 * @param {JSRecord<db:/infocom/liq_detalle>} record record that will be inserted
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"45AEDE3D-31EB-437D-8FD8-98075AC94B30"}
 */
function liq_detalle_onRecordInsert(record) {
	
	record.importe  = record.importe + globals.gredondeo_constante
	record.neto     = record.neto + globals.gredondeo_constante
	record.tarifa   = record.tarifa + globals.gredondeo_constante
	return true
}

/**
 * Record pre-insert trigger.
 * Validate the record to be inserted.
 * When false is returned the record will not be inserted in the database.
 * When an exception is thrown the record will also not be inserted in the database but it will be added to databaseManager.getFailedRecords(),
 * the thrown exception can be retrieved via record.exception.getValue().
 *
 * @param {JSRecord<db:/infocom/op_detalle_comprob>} record record that will be inserted
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"F5EFBEBC-528D-404A-8BD0-8F83C5014A21"}
 */
function op_detalle_comprob_onRecordInsert(record) 
{	
	record.importe 		= record.importe + globals.gredondeo_constante
	record.imp_original = record.imp_original + globals.gredondeo_constante
	if (record.op_detalle_comprob_to_ctacte_pr.ctacte_pr_to_tab_mov_pr.diario_pagos == 1)  // 14/11/2013
		record.neto_retencion_signo = record.neto_retencion * (-1);
	else
		record.neto_retencion_signo = record.neto_retencion;
	return true
}

/**
 * Record pre-update trigger.
 * Validate the record to be updated.
 * When false is returned the record will not be updated in the database.
 * When an exception is thrown the record will also not be updated in the database but it will be added to databaseManager.getFailedRecords(),
 * the thrown exception can be retrieved via record.exception.getValue().
 *
 * @param {JSRecord} record record that will be updated
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"E5AF6805-E85D-4A72-A1CB-8BB7563F0185"}
 */
function saldos_caja_onRecordUpdate(record) 
{
	// throw exception to pass info to handler, will be returned in record.exception.getValue() when record.exception is a DataException
	//if (not_valid) throw 'cannot update'
	// return boolean to indicate success
	/*// 29/10/2010
	record.saldo_efectivo=record.saldo_efectivo + globals.gredondeo_constante // 29/10/2010
	record.saldo_valores=record.saldo_valores + globals.gredondeo_constante */ // 29/10/2010
	return true
}

/**
 * Record pre-insert trigger.
 * Validate the record to be inserted.
 * When false is returned the record will not be inserted in the database.
 * When an exception is thrown the record will also not be inserted in the database but it will be added to databaseManager.getFailedRecords(),
 * the thrown exception can be retrieved via record.exception.getValue().
 *
 * @param {JSRecord<db:/infocom/reten_certificados>} record record that will be inserted
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"19C41CBA-25F2-4FBF-82F2-28A868BAF68C"}
 */
function reten_certificados_onRecordInsert(record) {
	
	record.gan_hasta			= record.gan_hasta + globals.gredondeo_constante
	record.gan_imponible		= record.gan_imponible + globals.gredondeo_constante
	record.gan_importe			= record.gan_importe + globals.gredondeo_constante
	record.gan_minimo			= record.gan_minimo + globals.gredondeo_constante
	record.gan_pagos_anteriores	= record.gan_pagos_anteriores + globals.gredondeo_constante
	record.gan_pagos_presente	= record.gan_pagos_presente + globals.gredondeo_constante
	record.gan_ret_anterior		= record.gan_ret_anterior + globals.gredondeo_constante
	record.gan_ret_fijo			= record.gan_ret_fijo + globals.gredondeo_constante
	record.gan_subtotal			= record.gan_subtotal + globals.gredondeo_constante
	record.gan_total			= record.gan_total + globals.gredondeo_constante
	return true
}

/**
 * Record pre-insert trigger.
 * Validate the record to be inserted.
 * When false is returned the record will not be inserted in the database.
 * When an exception is thrown the record will also not be inserted in the database but it will be added to databaseManager.getFailedRecords(),
 * the thrown exception can be retrieved via record.exception.getValue().
 *
 * @param {JSRecord<db:/infocom/op_retenciones>} record record that will be inserted
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"36B81377-8431-4508-BF2E-0452A1370B3F"}
 */
function op_retenciones_1_onRecordInsert(record) {
	record.importe = record.importe + globals.gredondeo_constante
	return true
}

/**
 * Record pre-insert trigger.
 * Validate the record to be inserted.
 * When false is returned the record will not be inserted in the database.
 * When an exception is thrown the record will also not be inserted in the database but it will be added to databaseManager.getFailedRecords(),
 * the thrown exception can be retrieved via record.exception.getValue().
 *
 * @param {JSRecord<db:/infocom/ingbrut_control_viaj>} record record that will be inserted
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"710FCB05-37FD-4604-B00B-1079243DB927"}
 */
function ingbrut_control_viaj_onRecordInsert(record) 
{
	record.comision = record.comision + globals.gredondeo_constante  // 04/01/2011
	return true
}

/**
 * Called when the valuelist needs data, it has 3 modes.
 * real and display params both null: return the whole list
 * only display is specified, called by a typeahead, return a filtered list
 * only real value is specified, called when the list doesnt contain the real value for the give record value, this will insert this value into the existing list
 *
 * @param {String} displayValue The value of a lookupfield that a user types
 * @param {Object} realValue The real value for a lookupfield where a display value should be get for
 * @param {JSRecord} record The current record for the valuelist. (This is the FindRecord in find mode, which is like JSRecord has all the columns/dataproviders, but doesn't have its methods)
 * @param {String} valueListName The valuelist name that triggers the method.
 *
 * @returns {JSDataSet} A dataset with 1 or 2 columns display[,real]
 *
 * @properties={typeid:24,uuid:"93E631F6-C01E-4AB9-B30A-338CD980586E"}
 */
function getDataSetForValueListProductosMet(displayValue, realValue, record, valueListName) {
	var servidor = 'infocom'
	var args
	if (displayValue == null && realValue == null) {
		args = [globals.gUservID]
		return databaseManager.getDataSetByQuery(servidor, "select cod_producto "+globals.gCharConcat+" ' - ' "+globals.gCharConcat+" descripcion, producto_id from productos where userv_id = ? AND inactivo = 0 order by cod_producto", args, 100);
	} else if (displayValue != null) {
		// TYPE_AHEAD filter call, return a filtered list
		args = ["%"+displayValue + "%", "%"+displayValue + "%",globals.gUservID]
		return databaseManager.getDataSetByQuery(servidor, "select cod_producto "+globals.gCharConcat+" ' - ' "+globals.gCharConcat+" descripcion,producto_id from productos where upper(cod_producto) like upper(?) or upper(descripcion) like upper(?) and userv_id = ? AND inactivo = 0 order by cod_producto", args, 100);
	}
	else if (realValue!=null)
	{
		args = [realValue,globals.gUservID]
		return databaseManager.getDataSetByQuery(servidor, "select cod_producto "+globals.gCharConcat+" ' - ' "+globals.gCharConcat+" descripcion, producto_id from productos where producto_id = ? and userv_id = ? AND inactivo = 0", args, 1);
	}
	return null
}

/**
 * Called when the valuelist needs data, it has 3 modes.
 * real and display params both null: return the whole list
 * only display is specified, called by a typeahead, return a filtered list
 * only real value is specified, called when the list doesnt contain the real value for the give record value, this will insert this value into the existing list
 *
 * @param {String} displayValue The value of a lookupfield that a user types
 * @param {Object} realValue The real value for a lookupfield where a display value should be get for
 * @param {JSRecord} record The current record for the valuelist. (This is the FindRecord in find mode, which is like JSRecord has all the columns/dataproviders, but doesn't have its methods)
 * @param {String} valueListName The valuelist name that triggers the method.
 *
 * @returns {JSDataSet} A dataset with 1 or 2 columns display[,real]
 *
 * @properties={typeid:24,uuid:"D2AAAA5F-457D-4E20-B69D-6CC1CFFCB1D7"}
 */
function getDataSetForValueListCiudades(displayValue, realValue, record, valueListName) {
	var servidor = 'infocom'
	var args
	if (displayValue == null && realValue == null) {
		//return databaseManager.getDataSetByQuery(servidor, "select provincias.descripcion ' + ' - ' + CAST(c_postal AS Varchar) + ' - ' + localidad, ciudad_id from ciudades join provincias on ciudades.provincia_id = provincias.provincia_id", null, 100); //  11/04/2012
		return databaseManager.getDataSetByQuery(servidor, "select provincias.descripcion " + globals.gCharConcat + " ' - ' "+globals.gCharConcat + " CAST(c_postal AS Varchar) " + globals.gCharConcat + " ' - ' " + globals.gCharConcat + " localidad, ciudad_id from ciudades join provincias on ciudades.provincia_id = provincias.provincia_id", null, 100); // 11/04/2012
	} else if (displayValue != null) {
		// TYPE_AHEAD filter call, return a filtered list
		args = ["%"+displayValue + "%", "%"+displayValue + "%"]
		return databaseManager.getDataSetByQuery(servidor, "select provincias.descripcion " + globals.gCharConcat + " ' - ' " + globals.gCharConcat + " CAST(c_postal AS Varchar) " + globals.gCharConcat + " ' - ' " + globals.gCharConcat + " localidad, ciudad_id from ciudades join provincias on ciudades.provincia_id = provincias.provincia_id where CAST(c_postal AS Varchar) like ? or upper(localidad) like upper(?)", args, 100);
	}
	else if (realValue != null)
	{
		args = [realValue]
		return databaseManager.getDataSetByQuery(servidor, "select provincias.descripcion " + globals.gCharConcat + " ' - ' " + globals.gCharConcat + " CAST(c_postal AS Varchar) " + globals.gCharConcat + " ' - ' " + globals.gCharConcat + " localidad, ciudad_id from ciudades join provincias on ciudades.provincia_id = provincias.provincia_id where ciudad_id = ?", args, 1); // 11/04/2011
		//return databaseManager.getDataSetByQuery(servidor, "select provincias.descripcion + ' - ' + CAST(c_postal AS Varchar) + ' - ' + localidad, ciudad_id from ciudades join provincias on ciudades.provincia_id = provincias.provincia_id where ciudad_id = ?", args, 100);  //  11/04/2012
	}
	return null
}

/**
 * @properties={typeid:24,uuid:"02923813-C861-43AA-AC2C-C6817A6E162A"}
 */
function flete_calculo(importe) 
{	// calcula el %=globals.zparam_flete_porc  del importe=total de los rengloness - la bonificacion
	// =>si supera el monto fijo  
	// si no, va el monto fijo=globals.zparam_flete_importe
	
	var aux_flete = importe * globals.zparam_flete_porc / 100
	if (aux_flete > globals.zparam_flete_importe)
		return aux_flete;
	else
		return globals.zparam_flete_importe;
}

/**
 * @properties={typeid:24,uuid:"3DB6DE08-D8FC-4248-BCE2-470DA1CCC821"}
 */
function cajas_calculo(cantidad,cant_x_caja) 
{
	globals.k_cajas=0
	var aux_cajas=cantidad % cant_x_caja;
	if (aux_cajas==0)
		globals.k_cajas=cantidad / cant_x_caja; 		
	else
	{
		globals.k_cajas=(cantidad / cant_x_caja);
		globals.k_cajas++;
	}
	return globals.k_cajas;
}

/**
 * @properties={typeid:24,uuid:"7FB5068D-58D3-42E8-9CB5-53D32A670972"}
 * @AllowToRunInFind
 */
function verificar_cuit(cuit) 
{
	//TODO - HACER SQL CON ID != AL OTRO
	/** @type {JSFoundSet<db:/infocom/clientes>}*/
	var fs_cli = databaseManager.getFoundSet('infocom','clientes')
	fs_cli.find();
	fs_cli.cuit = cuit;
	var found	= fs_cli.search();
	if (found != 0)
	{
		globals.DIALOGS.showWarningDialog('Aviso','Ya existe cliente ' + fs_cli.razon_social + ' con el CUIT ' + fs_cli.cuit,'OK')
		return false;
	}
	if (cuit != null) // 01/06/2011
	{
		/* 
		VERIFICACION DE CUIT/CUIL (genérico) El CUIL consta de 11 números. Los 10 primeros (2 + 8) constituyen el código de identificación y el último, el dígito de verificación.
		* Para obtener esta verificación se procede de la siguiente forma: A cada dígito del código, se lo multiplica por los siguientes números (respectivamente) 5, 4, 3, 2, 7, 6, 5, 4, 3, 2 
		* y cada valor obtenido, se suma para obtener una expresión (que llamaremos "valor 1". A este "valor 1", 
		* se le saca el resto de la división entera a 11. 
		* Se obtiene de esta forma un número (del 0 al 10) (que llamamos "valor 2").
		* Sacamos la diferencia entre 11 y el "valor 2", y obtenemos un valor comprendido entre 1 y 11 (llamémosle "valor 3"). 
		* Si "valor 3"=11, el código verificador es cero. Si "valor 3"=10, el código verificador es 9. 
		* En cualquier otro caso, el código verificador es "valor 3". 
		* Ejemplo numérico con un número de CUIT, que es 20-17254359-7.
		2 0 1 7 2 5 4 3 5 9
		x
		5 4 3 2 7 6 5 4 3 2
		------------------------------------------------
		10 + 00 + 03 + 14 + 14 + 30 + 20 + 12 + 15 + 18 = 136 v1 = 136 136 mod 11 = 4 v2 = 4 11 - 4 = 7 v3 = 7 => Código de verificación es siete. 
	 	*/
			
		// CALCULO DE DIGITO VERIFICADOR del CUIT  desde
		var multi 	= new Array(5,4,3,2,7,6,5,4,3,2); // numeros por los que hay que multiplicar c/u
		var uno		= 0
		if (cuit[2] == '-')
		{
			var vector 	= new Array(cuit[0],cuit[1],cuit[3],cuit[4],cuit[5],cuit[6],cuit[7],cuit[8],cuit[9],cuit[10]);
			var $ultimo = 12
		}
		else
		{
			var vector = new Array(cuit[0],cuit[1],cuit[2],cuit[3],cuit[4],cuit[5],cuit[6],cuit[7],cuit[8],cuit[9]);
			var $ultimo = 10
		}
		// SUMA de cada numero por 5432765432  respectivamente
		for (var i = 0; i < 10; i++) // recorre hasta el digito verificador
		{
			vector[i] 	= vector[i] * multi[i]; // cada numero por 5432765432 cada uno respectivamente
			uno 		= uno + vector[i];
		}
		// DIVIDIR suma de produtos / 11
	
		// RESTO
		var aa = uno % 11;
	
		var digito = 11 - aa; // para todos los demas la diferencia es el digito
		if (digito == 11)
			digito = 0; // si digito = 11 => fuerza  digito = 0 x que el resto era = 0
		else
			if (digito == 10)
				digito = 9; // resto = 10 => digito = 9
		// CALCULO DE DIGITO VERIFICADOR del CUIT   hasta
		
		// COMPARA con lo ingresado
		if (cuit[$ultimo] != digito)
		{
			globals.DIALOGS.showWarningDialog('Aviso','CUIT erróneo - Dígito verificador calculado: ' + digito,'OK')
			return false;
		}
		else
			return true;
	}
	return false
}

/**
 * @properties={typeid:24,uuid:"85462EC2-C256-4BAD-9A74-849B9938D50C"}
 * @AllowToRunInFind
 */
function calcula_saldo_ctacte_m1(cliente) 
{
globals.gsaldo_m1=0;
// hecho con DataSetByQuery  08/07/2011
// 01/08/2011   anulado
/* var query='select sum(saldo_signo) from ctacte_cl where cliente_id=? group by cliente_id'  //  para todos los cliente
var args=new Array(cliente);  */  //  para todos los cliente
var query='select sum(saldo_signo) from ctacte_cl where cliente_id=?'	
var args=new Array();
args[0]=cliente;
var ds=databaseManager.getDataSetByQuery('infocom',query,args,1)
globals.gsaldo_m1=ds.getValue(1,1)

/*   lo hecho con find funciona ok 01/08/2011
 //  hecho con find
var ctacte = databaseManager.getFoundSet('infocom','ctacte_cl')
var estado_find=ctacte.find();
if (estado_find==false)
	{
	globals.DIALOGS.showWarningDialog('Aviso','No encontró saldo de ctacte.(Find) ','OK')
	}
ctacte.cliente_id=cliente;
ctacte.saldo= '>0.00';
var found=ctacte.search();
if (found != 0)
{
for (var i=1 ; i <= ctacte.getSize(); i++)
	{
		ctacte.setSelectedIndex(i);
		globals.gsaldo_m1 += ctacte.saldo_signo;
	}
}  */
return true; 
}

/**
 * @properties={typeid:24,uuid:"0969DA4F-4FF7-4305-A2AB-A005E9AB80AF"}
 * @AllowToRunInFind
 */
function calcula_ped_no_remitidos(cliente) 
{
	globals.gpedidos_no_remitidos=0;
	
	// hecho con DataSetByQuery  08/07/2011
	var query='select sum(total_renglon) from ped_detalle as "ren" join ped_cabecera as "cab" on ' +
		'ren.ped_cabecera_id=cab.ped_cabecera_id where cab.cliente_id=? and cab.ped_estado=? group by cliente_id'
	var args=new Array(cliente,globals.zconf_ped_autorizado)
	var ds=databaseManager.getDataSetByQuery('infocom',query,args,1)
	
	globals.gpedidos_no_remitidos=ds.getValue(1,1)
	
	/*   hecho con find
	var pedidos_pend = databaseManager.getFoundSet('infocom','ped_renglon');
	var estado_find=pedidos_pend.find();
	if (estado_find==false)
		{
		globals.DIALOGS.showWarningDialog('Aviso','No encontró pedidos pendientes.(Find) ','OK')
		}
	pedidos_pend.ped_detalle_to_ped_cabecera.estado=2  // solo autorizados
	pedidos_pend.ped_detalle_to_ped_cabecera.cliente_id=cliente
	//pedidos_pend.cliente_id=cliente;  //si se usa cabecera
	//pedidos_pend.importe_pendiente = '>0.00';   //  si se usa cabecera
	//pedidos_pend.ped_estado=2;//si se usa cabecera
	if (pedidos_pend.search() != 0)
	 {
		for (var i=1 ; i <= pedidos_pend.getSize(); i++)
		{
			pedidos_pend.setSelectedIndex(i);
			globals.gpedidos_no_remitidos += pedidos_pend.total_renglon;  //ver si es sin iva
		}
	 }  */
	return true;
}

/**
 * @properties={typeid:24,uuid:"F21B6442-353E-4B66-A065-0F0E87831723"}
 * @AllowToRunInFind
 */
function calcula_rem_no_facturados(cliente) 
{
	globals.gremitos_no_fact=0;
	
	// hecho con DataSetByQuery  08/07/2011
	var query='select sum(total_renglon * cantidad_pendiente_fac / cantidad) from rem_detalle as "ren" join rem_cabecera as "cab" on ' +
		'ren.rem_cabecera_id=cab.rem_cabecera_id where cab.cliente_id=? and cab.rem_estado<? group by cliente_id'
	var args=new Array(cliente,globals.zconf_rem_facturado_total)
	var ds=databaseManager.getDataSetByQuery('infocom',query,args,1)
	
	globals.gremitos_no_fact=ds.getValue(1,1)
	
	/*   hecho con find
	var remito_no_fact = databaseManager.getFoundSet('infocom','rem_renglon');
	var estado_find=remito_no_fact.find();
	if (estado_find==false)
		{
		globals.DIALOGS.showWarningDialog('Aviso','No encontró remitos no facturados.(Find) ','OK')
		}
	remito_no_fact.rem_detalle_to_rem_cabecera.estado='<3'  // solo autorizados
	remito_no_fact.rem_detalle_to_rem_cabecera.cliente_id=cliente
	//pedidos_pend.cliente_id=cliente;  //si se usa cabecera
	//pedidos_pend.importe_pendiente = '>0.00';   //  si se usa cabecera
	//pedidos_pend.ped_estado=2;//si se usa cabecera
	if (remito_no_fact.search() != 0)
	 {
		for (var i=1 ; i <= remito_no_fact.getSize(); i++)
		{
			remito_no_fact.setSelectedIndex(i);
			var auxiliar=total_renglon * remito_no_fact.cantidad_pendiente_fac / cantidad
			globals.gpedidos_no_remitidos += pedidos_pend.total_renglon;  // ver si es sin iva
		}
	 }   */
	return true; 
}

/**
 * @properties={typeid:24,uuid:"C69055B6-7C85-4D95-BE26-A2417A366CEB"}
 */
function calcula_total_riesgo() 
{
	globals.gtotal_riesgo = globals.gsaldo_chq_propios + globals.gsaldo_chq_terceros +globals.gsaldo_m1 +
							globals.gsaldo_m4 +	globals.gpedidos_no_remitidos +	globals.gremitos_no_fact ;
	return true;
}

/**
 * @properties={typeid:24,uuid:"EF74E550-3F30-4AB3-B570-8CE1EA6D51A5"}
 * @AllowToRunInFind
 */
function recibos_buscar_ultimos(cliente) 
{
	globals.gnumeral_recibo_vtas_1 = 0;  // es el mas viejo
	globals.gnumeral_recibo_vtas_2 = 0;
	globals.gnumeral_recibo_vtas_3 = 0;
	/**@type {JSFoundSet<db:/infocom/ctacte_cl>} */
	var ctacte = databaseManager.getFoundSet('infocom','ctacte_cl')
	var estado_find = ctacte.find();
	if (estado_find == false)
	{
		globals.DIALOGS.showWarningDialog('Aviso','No encontró ultimos recibos.(Find) ','OK')
	}
	ctacte.cliente_id 	= cliente;
	ctacte.cod_mov		= 4;   // valor fijo de tabmov_cl = recibos
	var found = ctacte.search();
	if (found != 0)
	{
		ctacte.sort('fecha_mov desc');  // desc=ultimo queda primero
		for (var i=1 ; i <= 3; i++)     // 3 ultimos recibos
		{
			ctacte.setSelectedIndex(i);
			if (i==1)
				globals.gnumeral_recibo_vtas_1 = ctacte.ctacte_cl_to_rec_cabecera.numeral_dias;
			if (i==2)
				globals.gnumeral_recibo_vtas_2 = ctacte.ctacte_cl_to_rec_cabecera.numeral_dias;
			if (i==3)
				globals.gnumeral_recibo_vtas_3 = ctacte.ctacte_cl_to_rec_cabecera.numeral_dias;
		}
	}
	return true;
}

/**
 * @properties={typeid:24,uuid:"9A07DD5A-F7AB-4789-9A82-A80D1AB29583"}
 */
function calcula_coef_aceleracion_compras_cli(cliente,imp_pedido) 
{
	globals.calcula_prom_mens_cli(cliente);    // prom. segun globals.zparam_meses_prom_vta
	globals.calcula_ult_mes_vta_cli(cliente);  // ult. 30 dias
	globals.gcoef_aceleracion_compra=(globals.vta_cli_ult_mes + imp_pedido ) / globals.vta_cli_prom
	return globals.gcoef_aceleracion_compra;      //  luego comparar con 	globals.zparam_tope_coef_acel
}

/**
 * Called when the valuelist needs data, it has 3 modes.
 * real and display params both null: return the whole list
 * only display is specified, called by a typeahead, return a filtered list
 * only real value is specified, called when the list doesnt contain the real value for the give record value, this will insert this value into the existing list
 *
 * @param {String} displayValue The value of a lookupfield that a user types
 * @param {Object} realValue The real value for a lookupfield where a display value should be get for
 * @param {JSRecord} record The current record for the valuelist. (This is the FindRecord in find mode, which is like JSRecord has all the columns/dataproviders, but doesn't have its methods)
 * @param {String} valueListName The valuelist name that triggers the method.
 *
 * @returns {JSDataSet} A dataset with 1 or 2 columns display[,real]
 *
 * @properties={typeid:24,uuid:"CAFFDD7A-FA75-4A19-B32B-B2BEAB10C646"}
 */
function getDataSetForValueListProductosMetDescripcion(displayValue, realValue, record, valueListName) {
	var servidor = 'infocom'
	var args
	if (displayValue == null && realValue == null) {
		return databaseManager.getDataSetByQuery(servidor, "select descripcion from productos where inactivo = 0", null, 100);
	} else if (displayValue != null) {
		args = ["%"+displayValue + "%"]
		return databaseManager.getDataSetByQuery(servidor, "select  descripcion from productos where descripcion ilike ? and inactivo = 0", args, 100);
	}
	else if (realValue!=null)
	{
		args = [realValue]
		return databaseManager.getDataSetByQuery(servidor, "select  descripcion from productos where descripcion = ? and inactivo = 0", args, 100);
	}
	return null
}

/**
 * @properties={typeid:24,uuid:"193C745C-B846-4158-8FCA-A7675A066BC7"}
 * @AllowToRunInFind
 */
function calcula_saldo_chq(cliente) 
{
globals.gsaldo_chq_propios=0;
globals.gsaldo_chq_terceros=0;

	// hecho con DataSetByQuery  08/07/2011
	var hoy=new Date();
	var fecha_hoy=new Date();
	var f1=utils.timestampToDate(hoy)
	var f2=utils.timestampToDate(fecha_hoy)
	f2.setDate(f1.getDate() + globals.zparam_margen_dias_chq); 
	var valor2=2;  // va 2=cheque y 3=cheque diferido   esta va fijo por ahora
	var valor3=3;
	var query='select sum(importe) from cheques where empresa=? ' + 
			  'and (valor_id=? or valor_id=?) ' + 
	          'and fecha_pago >=? and estado=? ' + 
	          'group by es_de_terceros order by es_de_terceros'
	var args=new Array(cliente,valor2,valor3,f2,globals.zconf_chq_en_caja);
	var ds=databaseManager.getDataSetByQuery('infocom',query,args,1);
	
	globals.gsaldo_chq_propios=ds.getValue(1,1);
	globals.gsaldo_chq_terceros=ds.getValue(2,1);
	
	/* hecho con find
	var chq = databaseManager.getFoundSet('infocom','cheques')
	var estado_find=chq.find();
	if (estado_find==false)
		{
		globals.DIALOGS.showWarningDialog('Aviso','No encontró saldo de cheques.(Find) ','OK')
		}
	// poner filtros
	//chq.cliente_id=cliente;    //  ??
	//chq.estado= '1'+'...'+'3';  //  ??
	//chq.fecha_pago= '>hoy';    //  ??    
	var found=chq.search(); 
	if (found != 0)
	{
	for (var i=1 ; i <= chq.getSize(); i++)
		{
			chq.setSelectedIndex(i);
			globals.gchq_saldo_terceros += chq.saldo_signo;
		}
	}   */
	return true;
}

/**
 * @properties={typeid:24,uuid:"B2FB7E35-BBA1-44DE-87C1-E1F12D417038"}
 * @AllowToRunInFind
 */
function factura_buscar_mas_antigua_adeudada(cliente) 
{
	/** @type {JSFoundSet<db:/infocom/ctacte_cl>}*/
	var ctacte = databaseManager.getFoundSet('infocom','ctacte_cl')
	var estado_find = ctacte.find();
	if (estado_find == false)
	{
		globals.DIALOGS.showWarningDialog('Aviso','No encontró saldo de ctacte al buscar FC mas antigua. (Find) ','OK')
	}
	ctacte.cliente_id = cliente;
	ctacte.saldo = '>0.00';
	var found = ctacte.search();
	if (found != 0)
	{
		ctacte.sort('ctacte.fecha_mov asc, ctacte_nro_factura desc')
		ctacte.setSelectedIndex(1);  // el primero es el mas viejo
		globals.gfact_mas_antigua_adeudada = ctacte.fecha_mov;
	}
	else 
		globals.gfact_mas_antigua_adeudada = application.getServerTimeStamp()
}

/**
 * @properties={typeid:24,uuid:"F5F442AD-5012-4F86-8F02-295BB42F445A"}
 * @AllowToRunInFind
 */
function recibos_buscar_ultimos_3(cliente) 
{  
	/** @type {JSFoundSet<db:/infocom/ctacte_cl>}*/
	var ctacte = databaseManager.getFoundSet('infocom','ctacte_cl')
	var estado_find = ctacte.find();
	if (estado_find == false)
	{
		globals.DIALOGS.showWarningDialog('Error','No encontró saldo de ctacte al buscar ultimos recibos. (Find) ','OK')
	}
	ctacte.cliente_id 	= cliente;
	ctacte.cod_mov 		= 4;   //  TODO  OJO está fijo codigo=4=recibos  
	var found = ctacte.search();
	if (found != 0)
	{
		ctacte.sort('fecha_mov desc')
		ctacte.setSelectedIndex(1);  // el primero es el mas nuevo
		globals.gnumeral_recibo_vtas_1 = ctacte.ctacte_cl_to_rec_cabecera.numeral_dias;
		ctacte.setSelectedIndex(2); 
		globals.gnumeral_recibo_vtas_2 = ctacte.ctacte_cl_to_rec_cabecera.numeral_dias;
		ctacte.setSelectedIndex(3); 
		globals.gnumeral_recibo_vtas_3 = ctacte.ctacte_cl_to_rec_cabecera.numeral_dias;
	}
}

/**
 * Called when the valuelist needs data, it has 3 modes.
 * real and display params both null: return the whole list
 * only display is specified, called by a typeahead, return a filtered list
 * only real value is specified, called when the list doesnt contain the real value for the give record value, this will insert this value into the existing list
 *
 * @param {String} displayValue The value of a lookupfield that a user types
 * @param {Object} realValue The real value for a lookupfield where a display value should be get for
 * @param {JSRecord} record The current record for the valuelist. (This is the FindRecord in find mode, which is like JSRecord has all the columns/dataproviders, but doesn't have its methods)
 * @param {String} valueListName The valuelist name that triggers the method.
 *
 * @returns {JSDataSet} A dataset with 1 or 2 columns display[,real]
 *
 * @properties={typeid:24,uuid:"D4D2154A-A3B2-44CC-908A-8D3DD70A51BD"}
 */
function getDataSetForValueListProductosCodigo(displayValue, realValue, record, valueListName) {
	var servidor = 'infocom'
	var args
	if (displayValue == null && realValue == null) {
		return databaseManager.getDataSetByQuery(servidor, "select cod_producto "+globals.gCharConcat+" ' - ' "+globals.gCharConcat+" descripcion ,cod_producto from productos where inactivo = 0 order by cod_producto", null, 100);
	} else if (displayValue != null) {
		// TYPE_AHEAD filter call, return a filtered list
		args = ["%"+displayValue + "%", "%"+displayValue + "%"]
		return databaseManager.getDataSetByQuery(servidor, "select  cod_producto "+globals.gCharConcat+" ' - ' "+globals.gCharConcat+" descripcion, cod_producto from productos where descripcion ilike ? or cod_producto ilike ? and inactivo = 0 order by cod_producto", args, 100);
	}
	else if (realValue!=null)
	{
		args = [realValue]
		return databaseManager.getDataSetByQuery(servidor, "select cod_producto "+globals.gCharConcat+" ' - ' "+globals.gCharConcat+" descripcion, cod_producto from productos where cod_producto = ? and inactivo = 0", args, 100);
	}
	return null
}

/**
 * @properties={typeid:24,uuid:"85A81E9E-4EA0-4098-B076-51B4E0C107D8"}
 */
function descuento_permitido(descuento_porc) 
{	//  DESCUENTO TOPE PERMITIDO
	if (Math.abs(descuento_porc) > globals.zparam_desc_permitido)
	{
		globals.DIALOGS.showWarningDialog('Aviso','Descuento ' + Math.abs(descuento_porc) + '% ingresado supera el ' + globals.zparam_desc_permitido + '% permitido','OK')
		return false;
	}
	else
		return true;
}

/**
 * @properties={typeid:24,uuid:"8CF84489-E1CD-485B-AB96-17E48F154C8C"}
 */
function riesgo_analisis(p_cliente,p_credito_asignado,p_plazo_pago,p_subtotal) 
{
	var mensaje1 = null;
	var mensaje2 = null;
	var mensaje3 = null;
	var mensaje4 = null;
	
	// caso 1)  /////////////////////////////////////////   
	//x ej 9/1,20 > plazo_pago     9=ult-fac-adeudada hasta dia de hoy / 1,20 (auxi1) contra plazo_pago 
	// ver dias de ult-fac. adeudada hasta hoy
	var f0 = new Date();
	var f1 = utils.timestampToDate(globals.gfact_mas_antigua_adeudada)
	var f2 = utils.timestampToDate(f0);
	var dias_fac = (f2 - f1) /1000/60/60/24 ;   
	//var dias_fac=30;   //  TODO   para probar se usó 30
	
	var auxi1=((100 + globals.zparam_margen_calc_ult_fac) / 100)
    var auxi2=(dias_fac /auxi1)   
    if(auxi2 > p_plazo_pago)  // NO AUTORIZA
		mensaje1='Dias ult. fac: ' +  dias_fac + ' / ' + utils.numberFormat(auxi1,'###,##0.00') + ' es mayor que el plazo del cliente: ' + p_plazo_pago + '.' ;
	else
		mensaje1=null;
			
	// caso 2)  /////////////////////////////////////////  
	//  9=numeral_dias del ult. recibo     9/1,20  (20%)
	auxi1 = (100 + globals.zparam_margen_calc_ult_fac) / 100
	//gnumeral_recibo_vtas_1: lo hizo metodo globals.recibos_buscar_ultimos en
	if ((globals.gnumeral_recibo_vtas_1/auxi1) > p_plazo_pago)  
		mensaje2='Dias ult. recibo: ' +  globals.gnumeral_recibo_vtas_1 + ' / ' + auxi1 + ' es mayor que el plazo del cliente: ' + p_plazo_pago + '.'; 
	else
		mensaje2=null;
		
	// caso 3)  /////////////////////////////////////////
	globals.calcula_coef_aceleracion_compras_cli(p_cliente,p_subtotal);
	
	if(globals.gcoef_aceleracion_compra > globals.zparam_tope_coef_acel)   // NO AUTORIZA
		mensaje3='Coef. de aceleracion: ' + globals.gcoef_aceleracion_compra + ' supera el tope: ' + globals.zparam_tope_coef_acel + '.';
	else
		mensaje3=null;
	
	// caso 4)  /////////////////////////////////////////    
	//total riesgo + pedido que se está haciendo s/iva debe ser <= credito_asignado
	if ((globals.gtotal_riesgo + p_subtotal) > p_credito_asignado)
		mensaje4 = 'Total Riesgo: ' + utils.numberFormat(globals.gtotal_riesgo,'###,###,##0.00') + ' mas pedido actual: ' + utils.numberFormat(p_subtotal,'###,###,##0.00')  + ' supera el credito permitido: ' + p_credito_asignado + '.';
	else
		mensaje4 = null;
			
	globals.gcumplimiento= ' '  // null;  arma mal menaje con null queda con NaN
	//globals.gcumplimiento='Riesgo:\n';
	if (mensaje1==null && mensaje2==null && mensaje3==null && mensaje4==null)
		return true;
	else
	{
		if(mensaje1!=null)
			globals.gcumplimiento=mensaje1 + ' \n';
		if(mensaje2!=null)
			globals.gcumplimiento=globals.gcumplimiento + mensaje2 + ' \n';
		if(mensaje3!=null)
			globals.gcumplimiento=globals.gcumplimiento + mensaje3 + ' \n';
		if(mensaje4!=null)
			globals.gcumplimiento=globals.gcumplimiento + mensaje4;
		// si el primero es null lo arma mal
		//cumplimiento=mensaje1 + ' \n' + mensaje2 + ' \n' + mensaje3 + ' \n' + mensaje4
		//cumplimiento=mensaje1 + mensaje2 + mensaje3 + mensaje4
		return false;
	}
}

/**
 * @properties={typeid:24,uuid:"F32E9945-F16D-462C-9599-90B2D4D77117"}
 */
function configuraCharConcat() {
	//Caracter para concatenar campos en los querys
	if (databaseManager.getDatabaseProductName('infocom') == 'postgresql')
	{
		globals.gCharConcat = '||'
		globals.gCharNull	= 'COALESCE'
	}
	else
	{
		globals.gCharConcat = '+'
		globals.gCharNull	= 'isnull'
	}
			
}

/**
 * @properties={typeid:24,uuid:"1CE6E972-C9D9-479F-8DEF-B20B52AC1608"}
 */
function calcula_cuit(cuit) 
{
	/*  
	VERIFICACION DE CUIT/CUIL (genérico) 
    El CUIL consta de 11 números. Los 10 primeros (2 + 8) constituyen el código de identificación y el último, el dígito de verificación.
	* Para obtener esta verificación se procede de la siguiente forma: A cada dígito del código, se lo multiplica por los siguientes números (respectivamente) 5, 4, 3, 2, 7, 6, 5, 4, 3, 2 
	* y cada valor obtenido, se suma para obtener una expresión (que llamaremos "valor 1". A este "valor 1", 
	* se le saca el resto de la división entera a 11. 
	* Se obtiene de esta forma un número (del 0 al 10) (que llamamos "valor 2").
	* Sacamos la diferencia entre 11 y el "valor 2", y obtenemos un valor comprendido entre 1 y 11 (llamémosle "valor 3"). 
	* Si "valor 3"=11, el código verificador es cero. Si "valor 3"=10, el código verificador es 9. 
	* En cualquier otro caso, el código verificador es "valor 3". 
* Ejemplo numérico con un número de CUIT, que es 20-17254359-7.
2 0 1 7 2 5 4 3 5 9
x
5 4 3 2 7 6 5 4 3 2
------------------------------------------------
10 + 00 + 03 + 14 + 14 + 30 + 20 + 12 + 15 + 18 = 136 v1 = 136 136 mod 11 = 4 v2 = 4 11 - 4 = 7 v3 = 7 => Código de verificación es siete. 

 */
	// CALCULO DE DIGITO VERIFICADOR del CUIT 
	var multi=new Array(5,4,3,2,7,6,5,4,3,2); // numeros por los que hay que multiplicar c/u
	var uno=0;
	var vector=new Array(cuit[0],cuit[1],cuit[3],cuit[4],cuit[5],cuit[6],cuit[7],cuit[8],cuit[9],cuit[10]);
	// SUMA de cada numero multiplicado por 5432765432 cada uno respectivamente
	for (var i = 0; i < 10; i++) // recorre hasta el digito verificador
	{
		vector[i]=vector[i] * multi[i]; // cada numero por 5432765432 cada uno respectivamente
		uno=uno + vector[i];
	}
	// DIVIDIR suma de produtos / 11 y obtener el resto
	
	// RESTO
	var resto = uno % 11;  
	
	// DIGITO = 11 - RESTO  
	var digito = 11 - resto; // para todos los demas la diferencia es el digito
	
	if (digito==10)
		digito=9; // si resto = 10 => fuerza  digito = 9
	
	// COMPARA con lo ingresado
	if (cuit[12]!=digito)	
		return false;
	else
		return true;
	
/*    TOMADO DE LA AFIP
	 C) RUTINA PARA EL CALCULO DEL DIGITO VERIFICADOR

Se considera para efectuar el cálculo el siguiente ejemplo:

01234567890

Etapa 1: Comenzar desde la izquierda, sumar todos los caracteres ubicados en las posiciones impares.

0 + 2 + 4 + 6 + 8 + 0 = 20

Etapa 2: Multiplicar la suma obtenida en la etapa 1 por el número 3.

20 x 3 = 60

Etapa 3: Comenzar desde la izquierda, sumar todos los caracteres que están ubicados en las posiciones pares.

1 + 3 + 5+ 7 + 9 = 25

Etapa 4: Sumar los resultados obtenidos en las etapas 2 y 3.

60 + 25 = 85

Etapa 5: Buscar el menor número que sumado al resultado obtenido en la etapa 4 dé un número múltiplo de 10. 
* Este será el valor del dígito verificador del módulo 10.

85 + 5 = 90

De esta manera se llega a que el número 5 es el dígito verificador módulo 10 para el código 01234567890

Siendo el resultado final:

012345678905

Rutina de módulo 10 c 
*/
}

/**
 * @properties={typeid:24,uuid:"2F4B97F4-32B0-46C8-BB34-3B67937EE52C"}
 */
function productoActivo(cod_producto) {
	var $query = 'select producto_id from productos where cod_producto = ? and inactivo = ?'
	var $args = [cod_producto, 0]             
	var $ds = databaseManager.getDataSetByQuery('infocom',$query,$args,1)
	
	return $ds.getMaxRowIndex()
}

/**
 * @properties={typeid:24,uuid:"8F302856-CA31-4D9B-B1E4-920C30B6F9E1"}
 */
function calcula_prom_mens_cli(cliente)
{
	//calcula el promedio mensual del cliente, usando param nro. de meses para prom. Se usa con calcula_ult_mes_cli para coef. de aceleracion
	var dias_a_restar=globals.zparam_meses_prom_vta * 30
    globals.gFechaHasta=new Date();
	globals.gFechaDesde=new Date();
	globals.gFechaDesde=globals.gFechaDesde.setDate (globals.gFechaHasta.getDate() - dias_a_restar);
	//  usa nuevo campo neto_signo porque debe ser sin iva
	var query='select sum(neto_signo) from ctacte_cl where cliente_id=? and fecha_mov>=?'	
	var args=new Array();
	args[0]=cliente;
	args[1]=globals.gFechaDesde;
	var ds=databaseManager.getDataSetByQuery('infocom',query,args,1)
	globals.vta_cli_prom=(ds.getValue(1,1) / globals.zparam_meses_prom_vta); 
}

/**
 * @properties={typeid:24,uuid:"6E88B08E-7B63-4D5A-9883-173A4C5BFED6"}
 */
function calcula_ult_mes_vta_cli(cliente) 
{	
	// calcula el monto de vtas de los ult. 30 dias del cliente. Se usa con calcula_prom_mens_cli para coef. de aceleracion
	globals.gFechaHasta=new Date();
	globals.gFechaDesde=new Date();
	globals.gFechaDesde=globals.gFechaDesde.setDate (globals.gFechaHasta.getDate() - 30);
	//  usa nuevo campo neto_signo porque debe ser sin iva
	var query='select sum(neto_signo) from ctacte_cl where cliente_id=? and fecha_mov>=?'	
	var args=new Array();
	args[0]=cliente;
	args[1]=globals.gFechaDesde;
	var ds=databaseManager.getDataSetByQuery('infocom',query,args,1);
	globals.vta_cli_ult_mes=ds.getValue(1,1);
	
}

/**
 * @properties={typeid:24,uuid:"E0C20E70-3E23-4B97-A036-EFA834D4084A"}
 */
function clientes_riesgo(p_cliente) 
{  // 27/01/2012 se renombro la que ya existia "historia del cliente"
//  buscar datos historicos del cliente para analisis de riesgo - visto el 18/5/2011

//  SALDO DE CTACTE  M1     devuelve el total en globals.gsaldo_m1
	globals.calcula_saldo_ctacte_m1(p_cliente);
//  SALDO DE CTACTE  M4    ver si se usa el mismo metodo o no  devuelve el total en globals.gsaldo_m4
	/*
	globals.gsaldo_m4=0;
	globals.calculo_saldo_ctacte_m1(p_cliente); 
	*/
//  VER CHEQUES propio y terceros  //  08/07/2011	    devuelve 2 totales : globals.gsaldo_chq_propios y globals.gsaldo_chq_terceros
	globals.calcula_saldo_chq(p_cliente);
//  PEDIDOS PENDIENTES de ENTREGA      devuelve globals.gpedidos_no_remitidos
	globals.calcula_ped_no_remitidos(p_cliente)
//  REMITOS NO FACTURADOS              devuelve globals.gremitos_no_fact
	globals.calcula_rem_no_facturados(p_cliente)
//  CALCULA RIESGO TOTAL               devuelve globals.gtotal_riesgo : es suma de los aneriores
	globals.calcula_total_riesgo();
//  FECHA DE FC ADEUDADA MAS ANTIGUA   devuelve globals.gfact_mas_antigua_adeudada
	globals.factura_buscar_mas_antigua_adeudada(p_cliente)
//  RECIBOS 3 ULTIMOS                  devuelve globals.gnumeral_recibo_vtas_1 , 2, y 3
	globals.recibos_buscar_ultimos_3(p_cliente)
}

/**
 * @properties={typeid:24,uuid:"A129FACB-D91F-43CE-B76E-56612510AC38"}
 */
function gOnHide(event) {
	if (forms[event.getFormName()].es_preview == undefined || forms[event.getFormName()].es_preview == 0)
	{
		var resp = globals.DIALOGS.showQuestionDialog( 'Confirma',  '¿Seguro que desea salir?' ,  'Si', 'No')
		if (resp == 'Si')
		{
		    databaseManager.revertEditedRecords()
		    databaseManager.setAutoSave(true)
		    return true
		}
		else
		{
		    return false
		}
	}
	return true
}

/**
 * @properties={typeid:24,uuid:"390340E3-FBC9-4CC0-9DDA-FC971EA4D431"}
 */
function gAltaCuentaContable(cuenta,subcuenta,descripcion,sinonimo) {
	
	var $cuenta = new Array()
	var i = 0
	while (i < cuenta.length && cuenta.indexOf('.', i) != -1)
	{
		var $cta = cuenta.substring(i, cuenta.indexOf('.', i))
		
		$cuenta[$cuenta.length] = $cta
		i = cuenta.indexOf('.', i)+1
	}
	$cta = cuenta.substring(i, cuenta.length)
	$cuenta[$cuenta.length] = $cta
	
	/** @type {JSFoundSet<db:/contable/cuentas>}*/
	var $cuentas = databaseManager.getFoundSet('contable','cuentas')
	$cuentas.newRecord()
	
	$cuentas.capitulo		= $cuenta[0]
	$cuentas.subcapitulo	= $cuenta[1]
	$cuentas.rubro			= $cuenta[2]
	$cuentas.cuenta			= $cuenta[3]
	$cuentas.subcuenta		= subcuenta
	$cuentas.descripcion	= descripcion 
	$cuentas.sinonimo		= sinonimo
	$cuentas.marca_sub 		= 0
	$cuentas.imputable 		= 1
	$cuentas.marca_imprimir = 0
	$cuentas.empresa        = globals.gUservID
	return $cuentas.cuenta_id
}

/**
 * Record pre-insert trigger.
 * Validate the record to be inserted.
 * When false is returned the record will not be inserted in the database.
 * When an exception is thrown the record will also not be inserted in the database but it will be added to databaseManager.getFailedRecords(),
 * the thrown exception can be retrieved via record.exception.getValue().
 *
 * @param {JSRecord<db:/infocom/clientes>} record record that will be inserted
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"C74D348E-018A-4BA6-81DF-935BD42E66B6"}
 */
function onAfterRecordInsertCliente(record) {
	if (!record.codigo_anterior)
	{
		record.codigo_anterior = record.cliente_id
	}

	globals.altaLog(0, 'clientes', record.cliente_id, record.codigo_anterior, 'Alta de Cliente: '+record.razon_social)
	
	if (globals.zparam_contable_nodo_cliente == null)
		return true
	
	var $cuentas = globals.zparam_contable_nodo_cliente.split('.')
	if ($cuentas)
	{
		for (var i = 0 ; i < $cuentas.length ; i++)
		{
			$cuentas[i] = $cuentas[i] * 1
		}
		var $sql = 'SELECT cuenta_id, imputable FROM cuentas WHERE capitulo = ? AND subcapitulo = ? AND rubro = ? AND cuenta = ? AND subcuenta = 0 AND empresa = ?'
		/** @type {Array<Object>}*/
		var $args = $cuentas
		$args.push(globals.gUservID)
		
		var $ds = databaseManager.getDataSetByQuery('contable',$sql,$args,1)
		if ($ds.getMaxRowIndex() == 0)
		{
			globals.DIALOGS.showWarningDialog('Aviso','No existe la cuenta de clientes. No se asignó cuenta contable','OK')
			return true
		}
		if ($ds.getValue(1,2) == 0)
		{
			// da de alta cuenta contable
			var $cue = globals.gAltaCuentaContable(globals.zparam_contable_nodo_cliente,record.cliente_id,'ZZ-' + record.razon_social + ' -Cl ' + record.cliente_id,record.razon_social)
			record.plancta_id = $cue
		}
		else
		{
			record.plancta_id = $ds.getValue(1,1)
		}
	}	
	return true
}

/**
 * Record pre-insert trigger.
 * Validate the record to be inserted.
 * When false is returned the record will not be inserted in the database.
 * When an exception is thrown the record will also not be inserted in the database but it will be added to databaseManager.getFailedRecords(),
 * the thrown exception can be retrieved via record.exception.getValue().
 *
 * @param {JSRecord<db:/infocom/cuentas_cyb>} record record that will be inserted
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"C6C93162-978F-419B-9F14-5F709485DFBF"}
 */
function cuentas_cyb_onRecordInsert(record) 
{
	if (record.cuentas_tipo == null)
		record.cuentas_tipo = 0
	else
	{
		if(record.cuentas_tipo == 1) // es banco
			record.caja_abierta = 1; 
		else
			record.caja_abierta = 0;
		
	}
	return true;
}

/**
 * Record pre-insert trigger.
 * Validate the record to be inserted.
 * When false is returned the record will not be inserted in the database.
 * When an exception is thrown the record will also not be inserted in the database but it will be added to databaseManager.getFailedRecords(),
 * the thrown exception can be retrieved via record.exception.getValue().
 *
 * @param {JSRecord<db:/infocom/proveedor>} record record that will be inserted
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"393CE8F2-53FA-4EED-B0FF-DA9E1F3B44AC"}
 */
function onRecordInsertProveedor(record) {
	if (record.es_fletero == 0 && (record.plancta_id_gastos == null || record.plancta_id_gastos == 0))
	{
		globals.DIALOGS.showWarningDialog('Aviso','Alta rechazada: Cuenta de gastos errónea','OK')
		return false
	}

	return true
}

/**
 * Called when the valuelist needs data, it has 3 modes.
 * real and display params both null: return the whole list
 * only display is specified, called by a typeahead, return a filtered list
 * only real value is specified, called when the list doesnt contain the real value for the give record value, this will insert this value into the existing list
 *
 * @param {String} displayValue The value of a lookupfield that a user types
 * @param {Object} realValue The real value for a lookupfield where a display value should be get for
 * @param {JSRecord} record The current record for the valuelist. (This is the FindRecord in find mode, which is like JSRecord has all the columns/dataproviders, but doesn't have its methods)
 * @param {String} valueListName The valuelist name that triggers the method.
 *
 * @returns {JSDataSet} A dataset with 1 or 2 columns display[,real]
 *
 * @properties={typeid:24,uuid:"33BD29DA-01B2-4423-9B18-470AC8673788"}
 */
function getDataSetForValueListPlanCuentas(displayValue, realValue, record, valueListName) {
	var $servidor = 'contable'
	var args
	if (displayValue == null && realValue == null) 
	{
// Devuelve todos los registros
		args = [globals.gUservID]
		return databaseManager.getDataSetByQuery($servidor, "select cuenta_nueva, cuenta_id from cuentas where empresa = ? and imputable = 1 and marca_imprimir = 1 order by capitulo, subcapitulo, rubro, cuenta,subcuenta", args, 100);
	}
	else 
	{
		if (displayValue != null) 
		{
// devuelve los valores que va filtrando segun lo que va poniendo en el TYPE_AHEAD
			args = new Array() 
			args[0] = "%"+ displayValue+ "%"
			args[1] = globals.gUservID
			return databaseManager.getDataSetByQuery($servidor, "select cuenta_nueva, cuenta_id from cuentas where upper(cuenta_nueva) like upper(?) and empresa = ? and imputable = 1  and marca_imprimir = 1 order by capitulo, subcapitulo, rubro, cuenta,subcuenta", args, 100);
		}
		else
		{
			if (realValue != null) 
			{
// Devuelve el valor que tiene el campo, si es que ya tiene uno			
				args = new Array() 
				args[0]=realValue
				args[1]=globals.gUservID
				return databaseManager.getDataSetByQuery($servidor, "select cuenta_nueva, cuenta_id from cuentas where cuenta_id = ? and empresa = ? order by capitulo, subcapitulo, rubro, cuenta,subcuenta", args, 1);
   			}
		}
	}
	return null
}

/**
 * Record after-insert trigger.
 *
 * @param {JSRecord<db:/infocom/proveedor>} record record that is inserted
 *
 * @properties={typeid:24,uuid:"5084DAAB-C538-4253-9C69-E1E3D3CE2737"}
 */
function afterInsertRecord_proveedor(record) {
	
	globals.altaLog(0, 'proveedor', record.proveedor_id, record.codigo_anterior, 'Alta de proveedor: '+record.razon_social)

	var $cuentas
	if (record.es_fletero == 1)
	{
		//Fletero
		if (globals.zparam_contable_nodo_fleteros == null)
			return
		$cuentas = globals.zparam_contable_nodo_fleteros.split('.')
	}
	else 
	{	//Proveedor
		if (globals.zparam_contable_nodo_proveedores == null)
			return
		$cuentas = globals.zparam_contable_nodo_proveedores.split('.')
	}

	if ($cuentas)
	{
		for (var i = 0 ; i < $cuentas.length ; i++)
		{
			$cuentas[i] = $cuentas[i] * 1
		}
		var $sql = 'SELECT cuenta_id, imputable FROM cuentas WHERE capitulo = ? AND subcapitulo = ? AND rubro = ? AND cuenta = ? AND subcuenta = 0 AND empresa = ?'
		/** @type {Array<Object>}*/
		var $args = $cuentas
		$args.push(globals.gUservID)
		
		var $ds = databaseManager.getDataSetByQuery('contable',$sql,$args,1)
		if ($ds.getMaxRowIndex() == 0)
		{
			globals.DIALOGS.showWarningDialog('Aviso','No existe la cuenta de proveedores. No se asignó cuenta contable','OK')
			return
		}
		if ($ds.getValue(1,2) == 0)
		{
			// da de alta cuenta contable
			var $cue
			if (record.es_fletero == 0) 
				//Proveedor
				$cue = globals.gAltaCuentaContable(globals.zparam_contable_nodo_proveedores,record.proveedor_id,'ZZ-' + record.razon_social  + ' -Pr ' + record.proveedor_id,record.razon_social)
			else 
				//Fletero
				$cue = globals.gAltaCuentaContable(globals.zparam_contable_nodo_fleteros,record.proveedor_id,   'ZZ-' + record.razon_social  + ' -Fl ' + record.proveedor_id,record.razon_social)
			
			record.plancta_id = $cue
		}
		else
		{
			record.plancta_id = $ds.getValue(1,1)
		}
	}
}

/**
 * Called when the valuelist needs data, it has 3 modes.
 * real and display params both null: return the whole list
 * only display is specified, called by a typeahead, return a filtered list
 * only real value is specified, called when the list doesnt contain the real value for the give record value, this will insert this value into the existing list
 *
 * @param {String} displayValue The value of a lookupfield that a user types
 * @param realValue The real value for a lookupfield where a display value should be get for
 * @param {JSRecord} record The current record for the valuelist.
 * @param {String} valueListName The valuelist name that triggers the method. (This is the FindRecord in find mode, which is like JSRecord has all the columns/dataproviders, but doesn't have its methods)
 * @param {Boolean} findMode True if foundset of this record is in find mode
 * @param {Boolean} rawDisplayValue The raw displayValue without being converted to lower case
 *
 * @returns {JSDataSet} A dataset with 1 or 2 columns display[,real]
 *
 * @properties={typeid:24,uuid:"1736E161-DE9F-413F-83A7-8A00C18C10D6"}
 */
function getTablasUsuario(displayValue, realValue, record, valueListName, findMode, rawDisplayValue) {
	var $sql_cab 	= 'SELECT columna_id, columna_descripcion, tabla, tabla_completa, condicion FROM tablas_usuario_cab WHERE valuelist_name = ?'
	var $args_cab 	= [valueListName]
	var $ds_cab 	= databaseManager.getDataSetByQuery('infocom',$sql_cab,$args_cab,1)

	var $sql_dtl 	= 'SELECT id_relacionado FROM tablas_usuario_dtl WHERE valuelist_name = ? AND usuario_id = ?'
	var $args_dtl 	= [valueListName, globals.gUsuarioID]
	var $ds_dtl 	= databaseManager.getDataSetByQuery('infocom',$sql_dtl,$args_dtl,-1)
	
	var $where = ''
	if ($ds_cab.getValue(1,4) == 0)
	{
		$where 	= ' AND ' + $ds_cab.getValue(1,1) + ' IN (' + $ds_dtl.getColumnAsArray(1).join(',') +')'
	}
	if ($ds_cab.getValue(1,5))
	{
		$where += ' AND '+ $ds_cab.getValue(1,5)
	}
	
	var $args
	var $sql
	var $ds
	if (displayValue == null && realValue == null) {
		$sql = 'SELECT ' + $ds_cab.getValue(1,2) + ', ' + $ds_cab.getValue(1,1) + ' FROM ' + $ds_cab.getValue(1,3) + ' WHERE userv_id = ? ' + $where
		$args = [globals.gUservID]
		$ds = databaseManager.getDataSetByQuery('infocom',$sql,$args,50)
	} else if (displayValue != null) {
		$sql = 'SELECT ' + $ds_cab.getValue(1,2) + ', ' + $ds_cab.getValue(1,1) + ' FROM ' + $ds_cab.getValue(1,3) + ' WHERE userv_id = ? AND upper('+$ds_cab.getValue(1,2) + ') LIKE upper(?) ' + $where
		$args = [globals.gUservID,'%'+displayValue+'%']
		$ds = databaseManager.getDataSetByQuery('infocom',$sql,$args,50)
	} else if (realValue != null) {
		$sql = 'SELECT ' + $ds_cab.getValue(1,2) + ', ' + $ds_cab.getValue(1,1) + ' FROM ' + $ds_cab.getValue(1,3) + ' WHERE userv_id = ? AND '+ $ds_cab.getValue(1,1) + ' = ? ' + $where
		$args = [globals.gUservID,realValue]
		$ds = databaseManager.getDataSetByQuery('infocom',$sql,$args,1)
	}
	return $ds;
}
